另一个线程中 python3 中的非阻塞套接字服务器 运行
Non-blocking socket server running in python3 in another thread
我想知道 运行 非阻塞 python3 套接字服务器的最佳方法。
我目前的代码是:
def start(data):
global sock
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(("0.0.0.0", 8080))
sock.listen(2)
while True:
#Does something
client.close()
except KeyboardInterrupt:
kill()
def kill():
sock.close()
在我的主程序中,如何让这个套接字服务器 运行 在后台(比如,在另一个线程中)而不阻塞主线程,以便我可以继续在主线程中做其他事情创建端点后?例如,在我的主线程中,我希望能够调用 createEndpoint(data)
然后还调用一些其他函数等
Q : how would I make this … run in the background … and not block the main thread so I can continue…?
这在 Python3 中永远不会发生 (自从 Guido ROSSUM 宣称自己以来,很可能会一直如此,除非 Python-解释器将首先确定可行,然后成功进行)
Python 及其所有线程都由垄断单例集中控制,这是 Python{2|3} GIL 锁的中央唯一共享资源。
GIL 锁步进主要重新序列化任何基于 py-threads 的执行,因此结果是纯 [CONCURRENT]
] 交错序列(右 - 原则上完全避免任何并发,任何希望的 [PARALLEL]
代码执行形式越多)。
这就是说,人们可能会跳出这个 Python 设计的限制并产生一个非 pythonic 框架——比如 ZeroMQ, that works independently of that, sort of "besides" the python-interpreter, and that would handle all the signalling/messaging services independently over smart sockets (archetyped by agents' behaviours), having fully escaped from the known GIL-lock re-serialisation bottleneck for the performance ( and would also allow to harness the mix of colocated and distributed-computing 多对多进程' 通信架构 )
我想知道 运行 非阻塞 python3 套接字服务器的最佳方法。
我目前的代码是:
def start(data):
global sock
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(("0.0.0.0", 8080))
sock.listen(2)
while True:
#Does something
client.close()
except KeyboardInterrupt:
kill()
def kill():
sock.close()
在我的主程序中,如何让这个套接字服务器 运行 在后台(比如,在另一个线程中)而不阻塞主线程,以便我可以继续在主线程中做其他事情创建端点后?例如,在我的主线程中,我希望能够调用 createEndpoint(data)
然后还调用一些其他函数等
Q : how would I make this … run in the background … and not block the main thread so I can continue…?
这在 Python3 中永远不会发生 (自从 Guido ROSSUM 宣称自己以来,很可能会一直如此,除非 Python-解释器将首先确定可行,然后成功进行)
Python 及其所有线程都由垄断单例集中控制,这是 Python{2|3} GIL 锁的中央唯一共享资源。
GIL 锁步进主要重新序列化任何基于 py-threads 的执行,因此结果是纯 [CONCURRENT]
] 交错序列(右 - 原则上完全避免任何并发,任何希望的 [PARALLEL]
代码执行形式越多)。
这就是说,人们可能会跳出这个 Python 设计的限制并产生一个非 pythonic 框架——比如 ZeroMQ, that works independently of that, sort of "besides" the python-interpreter, and that would handle all the signalling/messaging services independently over smart sockets (archetyped by agents' behaviours), having fully escaped from the known GIL-lock re-serialisation bottleneck for the performance ( and would also allow to harness the mix of colocated and distributed-computing 多对多进程' 通信架构 )