Python 当一个套接字成功时,让gevent停止轮询
我正在使用gevent轮询几个套接字,以查看指定的端口之一是否打开。如果其中一个套接字成功,如何使gevent停止轮询Python 当一个套接字成功时,让gevent停止轮询,python,gevent,Python,Gevent,我正在使用gevent轮询几个套接字,以查看指定的端口之一是否打开。如果其中一个套接字成功,如何使gevent停止轮询 import gevent from gevent import socket vm_ip = "10.3.12.2" ports = [22, 16120, 16122] def fn(port): while True: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.
import gevent
from gevent import socket
vm_ip = "10.3.12.2"
ports = [22, 16120, 16122]
def fn(port):
while True:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(5)
result = s.connect_ex((vm_ip, port))
s.close()
if result == 0:
return
jobs = [gevent.spawn(fn, port) for port in ports]
gevent.joinall(jobs, timeout=30)
您只需在while循环中设置一个标志,并在找到结果时关闭该标志。Greenlet是协程,而不是线程,因此这样做没有问题:
import gevent
from gevent import monkey
monkey.patch_all()
from gevent import socket
vm_ip = "10.3.12.2"
ports = [22, 16120, 16122]
found = False
def fn(port):
while not found:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(5)
result = s.connect_ex((vm_ip, port))
s.close()
if result == 0:
found = True
return
jobs = [gevent.spawn(fn, port) for port in ports]
gevent.joinall(jobs, timeout=30)