Python:如何并行运行python函数?
我先研究了一下,却找不到答案。我试图在Python中并行运行多个函数。
我有这样的事情:
files.pyimport 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.pyfrom files import func1, func2
runBothFunc(func1(), func2())
我希望能够几乎同时创建两个目录,因为我每分钟都在统计要创建多少个文件。如果该目录不存在,将会拖延我的时间。
回答:
你可以使用threading或multiprocessing。
由于CPython的特殊性,threading
不太可能实现真正的并行性。因此,multiprocessing
通常是更好的选择。
这是一个完整的示例:
from multiprocessing import Processdef 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