Python:同时执行多个函数

2024-04-29 21:58:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在Python中同时运行两个函数。我尝试了下面使用multiprocessing的代码,但是当我执行代码时,第二个函数只在第一个函数完成后才开始。

from multiprocessing import Process
def func1:
     #does something

def func2:
     #does something

if __name__=='__main__':
     p1 = Process(target = func1)
     p1.start()
     p2 = Process(target = func2)
     p2.start()

Tags: 函数代码fromimporttargetdefmultiprocessingprocess
3条回答

这正是我需要的。我知道没人问我,但我修改了shashank的代码,以适合Python 3,让其他人看:)

from multiprocessing import Process
import sys

rocket = 0

def func1():
    global rocket
    print ('start func1')
    while rocket < sys.maxsize:
        rocket += 1
    print ('end func1')

def func2():
    global rocket
    print ('start func2')
    while rocket < sys.maxsize:
        rocket += 1
    print ('end func2')

if __name__=='__main__':
    p1 = Process(target=func1)
    p1.start()
    p2 = Process(target=func2)
    p2.start()

将sys.maxsize替换为一个数字,然后打印(rocket),您可以看到它一次计数一个。找到一个号码然后停下来

你做得对。:)

试着运行这段愚蠢的代码:

from multiprocessing import Process
import sys

rocket = 0

def func1():
    global rocket
    print 'start func1'
    while rocket < sys.maxint:
        rocket += 1
    print 'end func1'

def func2():
    global rocket
    print 'start func2'
    while rocket < sys.maxint:
        rocket += 1
    print 'end func2'

if __name__=='__main__':
    p1 = Process(target = func1)
    p1.start()
    p2 = Process(target = func2)
    p2.start()

您将看到它打印“start func1”,然后打印“start func2”,在很长一段时间后,您将最终看到函数结束。但它们确实会同时执行。

由于进程启动需要一段时间,您甚至可以在“start func1”之前看到“start func2”

这是@Shashank的一个很好的例子。我只想说,我必须在末尾添加join,否则这两个进程不会同时运行:

from multiprocessing import Process
import sys

rocket = 0

def func1():
    global rocket
    print 'start func1'
    while rocket < sys.maxint:
        rocket += 1
    print 'end func1'

def func2():
    global rocket
    print 'start func2'
    while rocket < sys.maxint:
        rocket += 1
    print 'end func2'

if __name__=='__main__':
    p1 = Process(target = func1)
    p1.start()
    p2 = Process(target = func2)
    p2.start()
    # This is where I had to add the join() function.
    p1.join()
    p2.join()

此外,请查看此线程: When to call .join() on a process?

相关问题 更多 >