python multiprocessing for mandelbrot set
please help speed this up. (I am a multiprocessing noob):
from multiprocessing import Pool
from numpy import real, imag, abs
from PIL import Image
from threading import Thread
import os
resolution = 15000 # not direct resolution, but proportional to it
resolution100=int(resolution*0.01)
size = tuple([100, resolution*2])
color = tuple([1])
start_r = 0
stop_r= 0
"""r is real and i is imaginary where practical"""
def process_job(r):
"""creates a slice of the set"""
img = Image.new('1', size, color) # B&W image
print(int(r + 2*resolution100+1), 'of', int(resolution100 *3))
r = r * 100
for rval in range(100):
for i in range(-resolution, resolution, 1):
if abrot(((r + rval) / resolution), (i / resolution * 1j)):
try:
img.putpixel((rval, i + resolution,), 0)
except:
print(r, rval, i + resolution)
img.save(('z_images/' + str(resolution) + '/' + str(int(r/100)+int(resolution*.02)) + '.png'))
def abrot(x, y):
"""tests a point"""
c = (x + y)
z = 0 + 0j
for _ in range(5):
z = z * z + c
if abs(real(z*z+c))>=2and abs(imag(z*z+c))>=2:
return False
for _ in range(int(resolution / 10)):
if real(z + 0.0001) > float(real(z*z+c)) > real(z - 0.0001):
return True
z = z * z + c
if abs(real(z)) >= 2:
return False
return True
def doItAll(resolution):
with Pool(4, maxtasksperchild=10) as p:
p.map(process_job, range((-2 * resolution100+start_r), resolution100-stop_r, 1))
if __name__ == '__main__':
try:
os.mkdir('/Users/milo/PycharmProjects/mandlebrot/venv/z_images/'+str(resolution)+'/') # I know I misspelled it
except:pass
doItAll(resolution)
# image names must be sorted, but are strings like '1.png', so dict is used
beta_dirs=(os.listdir('/Users/milo/PycharmProjects/mandlebrot/venv/z_images/'+str(resolution)+'/'))
dic={}
for dir in beta_dirs:
key=''
for character in dir:
if character in '1234567890-':
key+=(character)
dic[int(key)]=dir
img = Image.new('1', (resolution*3, resolution*2))
r_offset = 0
for dir in sorted(dic.items()):
im=Image.open('/Users/milo/PycharmProjects/mandlebrot/venv/z_images/'+str(resolution)+'/'+dir[1])
img.paste(im, (r_offset, 0))
r_offset += 100
img.save(('z_images/brot' + str(resolution) + '.png'))
print('saved as brot' + str(resolution) + '.png')
this is being run on a mac fyi, also it runs fine, just slow. mostly looking to speed it up, and allow for restarts more easily. I am running pool with more cores than I think I have, but activity monitor is showing best cpu utilization with 4 processes, so I don't know what I should do.
code produces B&W images of slices of the set, then concatinates them
python-3.x
New contributor
add a comment |
please help speed this up. (I am a multiprocessing noob):
from multiprocessing import Pool
from numpy import real, imag, abs
from PIL import Image
from threading import Thread
import os
resolution = 15000 # not direct resolution, but proportional to it
resolution100=int(resolution*0.01)
size = tuple([100, resolution*2])
color = tuple([1])
start_r = 0
stop_r= 0
"""r is real and i is imaginary where practical"""
def process_job(r):
"""creates a slice of the set"""
img = Image.new('1', size, color) # B&W image
print(int(r + 2*resolution100+1), 'of', int(resolution100 *3))
r = r * 100
for rval in range(100):
for i in range(-resolution, resolution, 1):
if abrot(((r + rval) / resolution), (i / resolution * 1j)):
try:
img.putpixel((rval, i + resolution,), 0)
except:
print(r, rval, i + resolution)
img.save(('z_images/' + str(resolution) + '/' + str(int(r/100)+int(resolution*.02)) + '.png'))
def abrot(x, y):
"""tests a point"""
c = (x + y)
z = 0 + 0j
for _ in range(5):
z = z * z + c
if abs(real(z*z+c))>=2and abs(imag(z*z+c))>=2:
return False
for _ in range(int(resolution / 10)):
if real(z + 0.0001) > float(real(z*z+c)) > real(z - 0.0001):
return True
z = z * z + c
if abs(real(z)) >= 2:
return False
return True
def doItAll(resolution):
with Pool(4, maxtasksperchild=10) as p:
p.map(process_job, range((-2 * resolution100+start_r), resolution100-stop_r, 1))
if __name__ == '__main__':
try:
os.mkdir('/Users/milo/PycharmProjects/mandlebrot/venv/z_images/'+str(resolution)+'/') # I know I misspelled it
except:pass
doItAll(resolution)
# image names must be sorted, but are strings like '1.png', so dict is used
beta_dirs=(os.listdir('/Users/milo/PycharmProjects/mandlebrot/venv/z_images/'+str(resolution)+'/'))
dic={}
for dir in beta_dirs:
key=''
for character in dir:
if character in '1234567890-':
key+=(character)
dic[int(key)]=dir
img = Image.new('1', (resolution*3, resolution*2))
r_offset = 0
for dir in sorted(dic.items()):
im=Image.open('/Users/milo/PycharmProjects/mandlebrot/venv/z_images/'+str(resolution)+'/'+dir[1])
img.paste(im, (r_offset, 0))
r_offset += 100
img.save(('z_images/brot' + str(resolution) + '.png'))
print('saved as brot' + str(resolution) + '.png')
this is being run on a mac fyi, also it runs fine, just slow. mostly looking to speed it up, and allow for restarts more easily. I am running pool with more cores than I think I have, but activity monitor is showing best cpu utilization with 4 processes, so I don't know what I should do.
code produces B&W images of slices of the set, then concatinates them
python-3.x
New contributor
1
This question is incomplete. To help reviewers give you better answers, please add sufficient context to your question. The more you tell us about what your code does and what the purpose of doing that is, the easier it will be for reviewers to help you. Questions should include a description of what the code does
– Mathias Ettinger
22 hours ago
add a comment |
please help speed this up. (I am a multiprocessing noob):
from multiprocessing import Pool
from numpy import real, imag, abs
from PIL import Image
from threading import Thread
import os
resolution = 15000 # not direct resolution, but proportional to it
resolution100=int(resolution*0.01)
size = tuple([100, resolution*2])
color = tuple([1])
start_r = 0
stop_r= 0
"""r is real and i is imaginary where practical"""
def process_job(r):
"""creates a slice of the set"""
img = Image.new('1', size, color) # B&W image
print(int(r + 2*resolution100+1), 'of', int(resolution100 *3))
r = r * 100
for rval in range(100):
for i in range(-resolution, resolution, 1):
if abrot(((r + rval) / resolution), (i / resolution * 1j)):
try:
img.putpixel((rval, i + resolution,), 0)
except:
print(r, rval, i + resolution)
img.save(('z_images/' + str(resolution) + '/' + str(int(r/100)+int(resolution*.02)) + '.png'))
def abrot(x, y):
"""tests a point"""
c = (x + y)
z = 0 + 0j
for _ in range(5):
z = z * z + c
if abs(real(z*z+c))>=2and abs(imag(z*z+c))>=2:
return False
for _ in range(int(resolution / 10)):
if real(z + 0.0001) > float(real(z*z+c)) > real(z - 0.0001):
return True
z = z * z + c
if abs(real(z)) >= 2:
return False
return True
def doItAll(resolution):
with Pool(4, maxtasksperchild=10) as p:
p.map(process_job, range((-2 * resolution100+start_r), resolution100-stop_r, 1))
if __name__ == '__main__':
try:
os.mkdir('/Users/milo/PycharmProjects/mandlebrot/venv/z_images/'+str(resolution)+'/') # I know I misspelled it
except:pass
doItAll(resolution)
# image names must be sorted, but are strings like '1.png', so dict is used
beta_dirs=(os.listdir('/Users/milo/PycharmProjects/mandlebrot/venv/z_images/'+str(resolution)+'/'))
dic={}
for dir in beta_dirs:
key=''
for character in dir:
if character in '1234567890-':
key+=(character)
dic[int(key)]=dir
img = Image.new('1', (resolution*3, resolution*2))
r_offset = 0
for dir in sorted(dic.items()):
im=Image.open('/Users/milo/PycharmProjects/mandlebrot/venv/z_images/'+str(resolution)+'/'+dir[1])
img.paste(im, (r_offset, 0))
r_offset += 100
img.save(('z_images/brot' + str(resolution) + '.png'))
print('saved as brot' + str(resolution) + '.png')
this is being run on a mac fyi, also it runs fine, just slow. mostly looking to speed it up, and allow for restarts more easily. I am running pool with more cores than I think I have, but activity monitor is showing best cpu utilization with 4 processes, so I don't know what I should do.
code produces B&W images of slices of the set, then concatinates them
python-3.x
New contributor
please help speed this up. (I am a multiprocessing noob):
from multiprocessing import Pool
from numpy import real, imag, abs
from PIL import Image
from threading import Thread
import os
resolution = 15000 # not direct resolution, but proportional to it
resolution100=int(resolution*0.01)
size = tuple([100, resolution*2])
color = tuple([1])
start_r = 0
stop_r= 0
"""r is real and i is imaginary where practical"""
def process_job(r):
"""creates a slice of the set"""
img = Image.new('1', size, color) # B&W image
print(int(r + 2*resolution100+1), 'of', int(resolution100 *3))
r = r * 100
for rval in range(100):
for i in range(-resolution, resolution, 1):
if abrot(((r + rval) / resolution), (i / resolution * 1j)):
try:
img.putpixel((rval, i + resolution,), 0)
except:
print(r, rval, i + resolution)
img.save(('z_images/' + str(resolution) + '/' + str(int(r/100)+int(resolution*.02)) + '.png'))
def abrot(x, y):
"""tests a point"""
c = (x + y)
z = 0 + 0j
for _ in range(5):
z = z * z + c
if abs(real(z*z+c))>=2and abs(imag(z*z+c))>=2:
return False
for _ in range(int(resolution / 10)):
if real(z + 0.0001) > float(real(z*z+c)) > real(z - 0.0001):
return True
z = z * z + c
if abs(real(z)) >= 2:
return False
return True
def doItAll(resolution):
with Pool(4, maxtasksperchild=10) as p:
p.map(process_job, range((-2 * resolution100+start_r), resolution100-stop_r, 1))
if __name__ == '__main__':
try:
os.mkdir('/Users/milo/PycharmProjects/mandlebrot/venv/z_images/'+str(resolution)+'/') # I know I misspelled it
except:pass
doItAll(resolution)
# image names must be sorted, but are strings like '1.png', so dict is used
beta_dirs=(os.listdir('/Users/milo/PycharmProjects/mandlebrot/venv/z_images/'+str(resolution)+'/'))
dic={}
for dir in beta_dirs:
key=''
for character in dir:
if character in '1234567890-':
key+=(character)
dic[int(key)]=dir
img = Image.new('1', (resolution*3, resolution*2))
r_offset = 0
for dir in sorted(dic.items()):
im=Image.open('/Users/milo/PycharmProjects/mandlebrot/venv/z_images/'+str(resolution)+'/'+dir[1])
img.paste(im, (r_offset, 0))
r_offset += 100
img.save(('z_images/brot' + str(resolution) + '.png'))
print('saved as brot' + str(resolution) + '.png')
this is being run on a mac fyi, also it runs fine, just slow. mostly looking to speed it up, and allow for restarts more easily. I am running pool with more cores than I think I have, but activity monitor is showing best cpu utilization with 4 processes, so I don't know what I should do.
code produces B&W images of slices of the set, then concatinates them
python-3.x
python-3.x
New contributor
New contributor
edited 22 hours ago
miloLovesCamelCase
New contributor
asked yesterday
miloLovesCamelCasemiloLovesCamelCase
11
11
New contributor
New contributor
1
This question is incomplete. To help reviewers give you better answers, please add sufficient context to your question. The more you tell us about what your code does and what the purpose of doing that is, the easier it will be for reviewers to help you. Questions should include a description of what the code does
– Mathias Ettinger
22 hours ago
add a comment |
1
This question is incomplete. To help reviewers give you better answers, please add sufficient context to your question. The more you tell us about what your code does and what the purpose of doing that is, the easier it will be for reviewers to help you. Questions should include a description of what the code does
– Mathias Ettinger
22 hours ago
1
1
This question is incomplete. To help reviewers give you better answers, please add sufficient context to your question. The more you tell us about what your code does and what the purpose of doing that is, the easier it will be for reviewers to help you. Questions should include a description of what the code does
– Mathias Ettinger
22 hours ago
This question is incomplete. To help reviewers give you better answers, please add sufficient context to your question. The more you tell us about what your code does and what the purpose of doing that is, the easier it will be for reviewers to help you. Questions should include a description of what the code does
– Mathias Ettinger
22 hours ago
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
return StackExchange.using("mathjaxEditing", function () {
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
});
});
}, "mathjax-editing");
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "196"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
miloLovesCamelCase is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f211080%2fpython-multiprocessing-for-mandelbrot-set%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
miloLovesCamelCase is a new contributor. Be nice, and check out our Code of Conduct.
miloLovesCamelCase is a new contributor. Be nice, and check out our Code of Conduct.
miloLovesCamelCase is a new contributor. Be nice, and check out our Code of Conduct.
miloLovesCamelCase is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to Code Review Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f211080%2fpython-multiprocessing-for-mandelbrot-set%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
This question is incomplete. To help reviewers give you better answers, please add sufficient context to your question. The more you tell us about what your code does and what the purpose of doing that is, the easier it will be for reviewers to help you. Questions should include a description of what the code does
– Mathias Ettinger
22 hours ago