python multiprocessing for mandelbrot set












-1














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










share|improve this question









New contributor




miloLovesCamelCase is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
















  • 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














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










share|improve this question









New contributor




miloLovesCamelCase is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
















  • 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








-1







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










share|improve this question









New contributor




miloLovesCamelCase is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











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






share|improve this question









New contributor




miloLovesCamelCase is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question









New contributor




miloLovesCamelCase is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question








edited 22 hours ago







miloLovesCamelCase













New contributor




miloLovesCamelCase is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked yesterday









miloLovesCamelCasemiloLovesCamelCase

11




11




New contributor




miloLovesCamelCase is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





miloLovesCamelCase is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






miloLovesCamelCase is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.








  • 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




    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










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.










draft saved

draft discarded


















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.










draft saved

draft discarded


















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.




draft saved


draft discarded














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





















































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







Popular posts from this blog

How to make a Squid Proxy server?

Is this a new Fibonacci Identity?

19世紀