我想运行2个函数而无需等待第一个函数完成。我需要运行一个函数" ListeningToReceive"使端口侦听从远程代理接收数据,并在侦听该端口时,它执行第二个函数" RunRemoteAgents"运行远程代理以使它们将数据发送到侦听端口。 我使用了线程,但它似乎没有工作,它只是使端口监听并且不执行第二个功能
#!/usr/bin/python
import threading
def ListeningToReceive():
print "The port is open to receive data"
def RunRemoteAgensts():
print "Running remote agents to send Data to the open port here"
if __name__ == "__main__":
thread1 = threading.Thread(target=ListeningToReceive)
thread2 = threading.Thread(target=RunRemoteAgents)
thread1.start()
thread2.start()
答案 0 :(得分:2)
CPython实现细节:在CPython中,由于Global Interpreter Lock,只有一个线程可以同时执行Python代码(即使某些面向性能的库可能会克服此限制)。如果您希望应用程序更好地利用多核机器的计算资源,建议您使用多处理。但是,如果要同时运行多个I / O绑定任务,则线程仍然是一个合适的模型。
改为使用多处理:
from multiprocessing import Process
import time
def f(name):
print 'hello', name
time.sleep(10)
print "f is done"
def f2():
print "this is funct2"
if __name__ == '__main__':
p1 = Process(target=f, args=('bob',))
p2 = Process(target=f2, args=())
processes = list()
processes.append(p1)
processes.append(p2)
for p in processes:
p.start()