gpt4 book ai didi

python - 检查是否有任何套接字连接正在等待(python)

转载 作者:太空宇宙 更新时间:2023-11-03 19:41:27 25 4
gpt4 key购买 nike

我正在尝试在无限循环中运行任务,但我想保留沿途更改某些参数的机会,因此我考虑使用套接字将此数据传输到我的代码中。不幸的是,从文件读取可能太慢。

问题是,在大多数情况下,没有传入连接,我不想阻止代码。我能想到的最好的办法是 setblocking(False) 和 try block ,但我想知道是否有人可以用更 Pythonic 的方式做到这一点。

抱歉,如果这是非常微不足道的事情。我是网络新手。

我想要的一个简短的例子:

import socket
from time import sleep

HOST = '127.0.0.1'
PORT = 62800

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.setblocking(False)
server.bind((HOST, PORT))
server.listen()

a_parameter = 0.1
counter = 0

def task(a):
sleep(a)

global counter
counter+=1
print(counter)


while True:
try:
conn, addr = server.accept() # will throw an error if no connections are in the queue
with conn:
print('Connected by', addr)
data = conn.recv(1024)
a_parameter = float(data.decode("utf-8"))
print("New parameter:", a_parameter)
except:
pass

task(a_parameter)

您可以使用此客户端尝试一下:


import socket
import sys

HOST = '127.0.0.1' # The server's hostname or IP address
PORT = 62800 # The port used by the server

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
s.sendall(bytes(sys.argv[1], 'utf-8'))

最佳答案

最后,我根据 user207421 的评论选择了一个单独的线程,因为它感觉比 try 更少浪费,并且比 asyncio 更简单。我在这里复制我的代码,以防有人对 future 感兴趣:

from threading import Thread
import socket
from time import sleep

HOST = '127.0.0.1'
PORT = 62800


a_parameter = 0.1
counter = 0

def socket_handler_thread_function(threadname):

global a_parameter

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((HOST, PORT))
server.listen()

print('listening on', (HOST, PORT))

while True:
conn, addr = server.accept()
with conn:
print('Connected by', addr)
data = conn.recv(1024)
a_parameter = float(data.decode("utf-8"))
print("New parameter:", a_parameter)


def task(a):
sleep(a)

global counter
counter+=1
print(counter)

# daemon mode terminates the thread when the main code is killed
socket_handler_thread = Thread(
target=socket_handler_thread_function,
args=(1, ),
daemon=True
)
socket_handler_thread.start()

while True:
task(a_parameter)

关于python - 检查是否有任何套接字连接正在等待(python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60401995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com