0

I am aware that this question has already been asked, but I have done extensive research and am unable to figure my problem out.

My question has to do with running complex functions in parallel.

I'm using selenium webdriver to automatically download files from one website and upload them to another, and I want these functions to run at the same time. They both use while loops and have layered conditional statements. I cannot get the functions to run at the same time and would appreciate help. My code is as follows:

import multiprocessing
def auto_download():
 # function logic here 
def auto_upload():
 # function logic here 
if __name__ == '__main__':
p1 = multiprocessing.Process(name='auto download', target=auto_download())
p2 = multiprocessing.Process(name='auto upload', target=auto_upload())
p1.start()
p2.start()

This code runs the first function auto_download() but never starts the second.

However, if I run the following code from here, which is the same idea but with much simpler functions, it works fine.

import multiprocessing
import time
def add():
 while True:
 print (1)
 time.sleep(3)
def sud():
 while True:
 print(0)
 time.sleep(3)
if __name__ == '__main__':
 p1 = multiprocessing.Process(name='p1', target=add)
 p = multiprocessing.Process(name='p', target=sud)
 p1.start()
 p.start()

Does my problem stem from the complexity of the functions I am trying to run simultaneously? Thanks ahead of time for your help!

EDIT: The solution (thanks to Raw Dawg) is that I was calling the function directly instead of in the process object. This is different than the solutions for this question. The following code fixes the problem:

p1 = multiprocessing.Process(name='auto download', target=auto_download)
p2 = multiprocessing.Process(name='auto upload', target=auto_upload)
p1.start()
p2.start()
asked Mar 7, 2018 at 17:07
3
  • 1
    It may have something to do with the content of your functions blocking each other. I had a similar issue some years ago. Is it possible to publish the function code? Commented Mar 7, 2018 at 17:14
  • Thanks for your reply! There is confidential information contained in the functions (I'm writing this program for a company), but I'll edit that out so I can try to express the function logic. I'll edit and update my post. Commented Mar 7, 2018 at 17:19
  • Possible duplicate of Python multiprocessing : processes do not start Commented Mar 7, 2018 at 17:41

1 Answer 1

1

I think I found the problem here - when you define your process with

p1 = multiprocessing.Process(name='auto download', target=auto_download())

You are running the function auto_download(). You are essentially starting this function in the main process, not in a Process object as you want to. For this reason p1.start() does not have the effect you want, as you aren't running these functions concurrently. Notice that in the second example in the Process signature you define it as

p1 = multiprocessing.Process(name='p1', target=add)

with no parenthesis after add. Try it again with the following code:

p1 = multiprocessing.Process(name='auto download', target=auto_download)
p2 = multiprocessing.Process(name='auto upload', target=auto_upload)
p1.start()
p2.start()
answered Mar 7, 2018 at 17:22
Sign up to request clarification or add additional context in comments.

1 Comment

This fixed the problem! Thanks! Who would have thought the solution would be that simple. Much appreciated

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.