gpt4 book ai didi

python - 如何使用线程在 Python Twisted 服务器中同时运行多个连续任务?

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

假设您有 1000 个客户端连接到扭曲的服务器。这些客户端不断轮询更新(或者只是通过类似 WebSocket 之类的东西持续连接)。服务器的工作是检查所有 1000 个,检查其中哪些有更新,然后在更新时将其发送出去。

有没有办法让我在 Twisted 中可以在 4 个线程中运行 250 个线程(或者进一步划分)? Twisted 如何决定一次运行多少个任务?我可以连续检查250,甚至不时更改分布吗?

这是我想象的一个非常简单的版本,尽管我不知道它在 Twisted 中看起来如何:

class Server:

queues = [["250 clients"], ["250 clients"], ["250 clients"], ["250 clients"]]

@classmethod
def run_server(cls):
for i in xrange(len(cls.queues)):
# this would run in its own thread
cls.continuously_check_for_updates(cls.queues[i])

# server mainloop
while True:
if get_client_connection():
store_client_in_queue()
distribute_client_queues()

@classmethod
def continuously_check_for_updates(cls, queue):
i = 0
while True:
if i >= len(queue):
i = 0

client = queue[i]
if check_for_updates(client):
report_update(client)

i += 1

我很欣赏你的见解和建议。谢谢。

最佳答案

没有。 Python 一次只会执行一个线程(忽略一些不相关的细节)。没有理由使用线程来解决这个问题。

相反,您应该使用事件驱动的方法,这样您就不必不断地检查上千种不同的数据结构。相反,当相关变化发生时采取行动。

例如,不要编写如下程序:

def addSomeData(data):
someList.append(data)

def checkForData():
if someList:
return someList.pop(0)
return None

while True:
data = checkForData()
if data is not None:
processData(data)

编写一个像这样的程序:

def addSomeData(data):
processData(data)

它更简单、更高效。

关于python - 如何使用线程在 Python Twisted 服务器中同时运行多个连续任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22740191/

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