一般来说,在可能的情况下,最好使用一个线程来完成这样的操作。你只需要确保你的函数不会阻塞其他函数。想到的内置库是select。不幸的是,这有点难以解释,而且我已经有一段时间没有使用它了。希望这个链接能帮助你理解它http://pymotw.com/2/select/。在
您还可以使用multiprocessing库并在单独的线程中轮询每个pid。如果您计划进一步扩展,这可能很难管理!使用线程只能作为最后的手段(这是我通常在谈到线程时的经验法则)。https://docs.python.org/2/library/multiprocessing.html#module-multiprocessingfrom multiprocessing import Process
def askforprocess(processpid):
#Create TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Connect on host and port provided in command line arguments
server_address = ('172.16.1.105', int('5055'))
sock.connect(server_address)
# Send the data
try:
message = processpid
sock.sendall(message)
data = sock.recv(2048)
finally:
sock.close()
return data
if __name__ == '__main__':
info('main line')
p = Process(target=askforprocess, args=(processpid,))
p.start()
最后,还有一个Twisted库,它可能是最难理解的,但它使并发函数(不一定是并行的)易于编写。唯一的坏处是你可能不得不重写整个应用程序才能使用Twisted。不要被这个事实所拖累,试着用它,如果可以的话。在
希望有帮助。在