我知道这个问题已被提出,但我做了大量研究,无法解决我的问题。
我的问题与并行运行复杂功能有关。
我正在使用selenium webdriver从一个网站自动下载文件并将其上传到另一个网站,我希望这些功能同时运行。它们都使用 while循环并具有分层条件语句。我不能让功能同时运行,并希望得到帮助。我的代码如下:
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()
此代码运行第一个函数 auto_download()但从不启动第二个函数。
但是,如果我从here运行以下代码,这是相同的想法,但功能更简单,它可以正常工作。
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()
我的问题是否源于我试图同时运行的函数的复杂性?提前谢谢你的帮助!
编辑:解决方案(感谢Raw Dawg)是我直接调用函数而不是在进程对象中。这与this question的解决方案不同。以下代码修复了该问题:
p1 = multiprocessing.Process(name='auto download', target=auto_download)
p2 = multiprocessing.Process(name='auto upload', target=auto_upload)
p1.start()
p2.start()
答案 0 :(得分:1)
我认为我在这里找到了问题 - 当您使用
定义流程时p1 = multiprocessing.Process(name='auto download', target=auto_download())
您正在运行auto_download()
功能。您实际上是在主进程中启动此功能,而不是在您希望的Process对象中启动。因此,p1.start()
没有您想要的效果,因为您没有同时运行这些功能。请注意,在Process签名的第二个示例中,您将其定义为
p1 = multiprocessing.Process(name='p1', target=add)
add
后没有括号。请使用以下代码再次尝试:
p1 = multiprocessing.Process(name='auto download', target=auto_download)
p2 = multiprocessing.Process(name='auto upload', target=auto_upload)
p1.start()
p2.start()