尝试一下
我正在尝试使两个功能同时运行。
def func1():
print 'Working'
def func2():
print 'Working'
func1()
func2()
有人知道该怎么做吗?
执行此操作:
from threading import Thread
def func1():
print('Working')
def func2():
print("Working")
if __name__ == '__main__':
Thread(target = func1).start()
Thread(target = func2).start()
The answer about threading很好,但是您需要对要执行的操作更加具体。
如果您有两个函数都占用大量CPU,则线程(在CPython中)可能无济于事。然后,您可能想看一下multiprocessing module,或者可能要使用jython / IronPython。
如果是受CPU限制的性能,您甚至可以在(非线程)C中实现这些功能,并且比在python中执行两个并行操作要快得多。
没有更多信息,要找到一个好的答案并不容易。
一个选项,看起来让两个函数同时运行时间,正在使用threading
模块(threading
答案中的示例)。
但是,作为官方Python文档,它的延迟很小this描述。尝试使用的更好的模块是page。
此外,还有其他Python模块可用于异步执行(两个代码同时工作)。有关它们的一些信息并有助于选择它们,您可以阅读multiprocessing
堆栈溢出问题。
multiprocessing
模块的评论他可能想知道,因为全局翻译锁定即使计算机处于运行状态,它们也不会在完全相同的时间执行问题有多个CPU。 this
– JonasElfströmthreading
CPython的实现细节:由于具有全局解释器,因此在CPython中锁定,只有一个线程可以一次执行Python代码(即使某些面向性能的库可能会克服此限制)。
如果希望您的应用程序更好地利用多核计算机的计算资源,建议您使用multiprocessing或current.futures.ProcessPoolExecutor。但是,如果您使用线程,则仍然是合适的模型想同时运行多个I / O绑定任务。
这可以通过Jun 2 '10 at 11:39轻松完成,该系统使您可以轻松地并行化和分发Python代码。
为了并行化示例,您需要使用threading
定义函数,然后使用Ray调用它们。
@ray.remote decorator
[如果.remote
和import ray
ray.init()
# Define functions you want to execute in parallel using
# the ray.remote decorator.
@ray.remote
def func1():
print("Working")
@ray.remote
def func2():
print("Working")
# Execute func1 and func2 in parallel.
ray.get([func1.remote(), func2.remote()])
返回结果,则需要用func1()
替换为:]重写上面的代码:>
将在单台计算机以及一台计算机集群上运行。func2()
使用Ray比
ray.get([func1.remote(), func2.remote()])
模块或使用多线程有许多优点。特别地,same code
有关Ray的更多优点,请参见ret_id1 = func1.remote()
ret_id2 = func1.remote()
ret1, ret2 = ray.get([ret_id1, ret_id2])
。>>
尝试一下
multiprocessing
与多进程不同,线程模块确实可以同时工作,但是计时有点差。下面的代码打印“ 1”和“ 2”。这些分别由不同的功能调用。我确实注意到,将它们打印到控制台时,它们的时序会稍有不同。
this related post
输出:(请注意空格是打印之间的等待时间)
from threading import Thread
def fun1():
print("Working1")
def fun2():
print("Working2")
t1 = Thread(target=fun1)
t2 = Thread(target=fun2)
t1.start()
t2.start()
不确定是否有办法纠正它,或者根本不重要。我注意到的东西。
我认为您要传达的内容可以通过多处理来实现。但是,如果要通过线程执行此操作,则可以执行此操作。这可能有帮助
from threading import Thread
def one():
while(1 == num):
print("1")
time.sleep(2)
def two():
while(1 == num):
print("2")
time.sleep(2)
p1 = Thread(target = one)
p2 = Thread(target = two)
p1.start()
p2.start()
尝试一下
与多进程不同,线程模块确实可以同时工作,但是计时有点差。下面的代码打印“ 1”和“ 2”。这些分别由不同的功能调用。我确实注意到,将它们打印到控制台时,它们的时序会稍有不同。
我认为您要传达的内容可以通过多处理来实现。但是,如果要通过线程执行此操作,则可以执行此操作。这可能有帮助