使2个function同时运行
我正在尝试使2个函数在同一时间运行。
def func1(): print 'Working' def func2(): print 'Working' func1() func2()
有谁知道如何做到这一点?
做这个:
import threading from threading import Thread def func1(): print 'Working' def func2(): print 'Working' if __name__ == '__main__': Thread(target = func1).start() Thread(target = func2).start()
关于线程的答案是好的,但是你需要对你想要做的更具体一些。
如果你有两个函数都使用大量的CPU,线程(在CPython中)可能会让你无处可寻。 那么你可能想看看多处理模块,或者你可能想使用jython / IronPython。
如果CPU限制的性能是原因,你甚至可以在(非线程)C中实现东西,并且比在Python中做两个并行的东西获得更大的加速。
没有更多的信息,想出一个好的答案并不容易。
使用threading
模块(在这个问题的另一个答案中描述)的方法来
同时运行两个函数似乎工作但实际上有一个小的延迟,如
在官方Python文档中说明 。 尝试更好的解决scheme是使用多处理模块 。
另外,还有一些其他有用的Python模块可以用于asynchronous执行(同时有两段代码)。 有关哪一个是最好select的一些信息,请参阅https://stackoverflow.com/q/2629680/3787376
的堆栈溢出问题。
从官方的Python文档引用关于threading module
不工作:
CPython实现细节:在CPython中,由于全局解释器locking,只有一个线程可以一次执行Python代码(即使某些面向性能的库可能会克服此限制)。 如果您希望您的应用程序更好地使用多核计算机的计算资源,build议您使用多处理或concurrent.futures.ProcessPoolExecutor。 但是,如果要同时运行多个I / O绑定任务,线程仍然是一个合适的模型。
其他用户对threading module
:
他可能想知道,由于全局解释器locking,即使有问题的机器有多个CPU,它们也不会在同一时间执行。 wiki.python.org/moin/GlobalInterpreterLock
– 乔纳斯Elfström6年6月2日在11:39
我运行这个代码来检查函数是否在同一时间运行:
#! /usr/bin/env python import threading from threading import Thread import time def time1(): time.sleep(1) print time.time() def time2(): time.sleep(1) print time.time() if __name__ == '__main__': Thread(target = time1()).start() Thread(target = time2()).start()
这是它返回的内容:
1447425262.16 1447425263.16
对我来说,这似乎是一个接一个地运行的function…?