具有复杂函数的Python多处理

时间:2018-03-07 17:07:24

标签: python python-3.x multiprocessing python-multiprocessing

我知道这个问题已被提出,但我做了大量研究,无法解决我的问题。

我的问题与并行运行复杂功能有关。

我正在使用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()

1 个答案:

答案 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()