Python:在第一个函数保持运行时运行第二个函数

时间:2017-02-27 17:39:42

标签: python multithreading

我想运行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()

1 个答案:

答案 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()