Python:如何并行运行python函数?

我先研究了一下,却找不到答案。我试图在Python中并行运行多个函数。

我有这样的事情:

files.py

import common #common is a util class that handles all the IO stuff

dir1 = 'C:\folder1'

dir2 = 'C:\folder2'

filename = 'test.txt'

addFiles = [25, 5, 15, 35, 45, 25, 5, 15, 35, 45]

def func1():

c = common.Common()

for i in range(len(addFiles)):

c.createFiles(addFiles[i], filename, dir1)

c.getFiles(dir1)

time.sleep(10)

c.removeFiles(addFiles[i], dir1)

c.getFiles(dir1)

def func2():

c = common.Common()

for i in range(len(addFiles)):

c.createFiles(addFiles[i], filename, dir2)

c.getFiles(dir2)

time.sleep(10)

c.removeFiles(addFiles[i], dir2)

c.getFiles(dir2)

我想调用func1和func2并使它们同时运行。这些功能彼此之间或在同一对象上不相互作用。现在,我必须等待func1完成才能启动func2。我该如何执行以下操作:

process.py

from files import func1, func2

runBothFunc(func1(), func2())

我希望能够几乎同时创建两个目录,因为我每分钟都在统计要创建多少个文件。如果该目录不存在,将会拖延我的时间。

回答:

你可以使用threading或multiprocessing。

由于CPython的特殊性,threading不太可能实现真正的并行性。因此,multiprocessing通常是更好的选择。

这是一个完整的示例:

from multiprocessing import Process

def func1():

print 'func1: starting'

for i in xrange(10000000): pass

print 'func1: finishing'

def func2():

print 'func2: starting'

for i in xrange(10000000): pass

print 'func2: finishing'

if __name__ == '__main__':

p1 = Process(target=func1)

p1.start()

p2 = Process(target=func2)

p2.start()

p1.join()

p2.join()

可以按照以下方式轻松地将子进程的启动/联接机制封装为一个函数runBothFunc:

def runInParallel(*fns):

proc = []

for fn in fns:

p = Process(target=fn)

p.start()

proc.append(p)

for p in proc:

p.join()

runInParallel(func1, func2)

以上是 Python:如何并行运行python函数? 的全部内容, 来源链接: utcz.com/qa/435285.html

回到顶部