我有以下代码:
导入线程
def send_to_server(lst):
#Some logic to send the list to the server.
while 1:
lst = []
for i in range(1000):
lst.append(i)
task = threading.Thread(target=send_to_server,args(copy(lst),))
task.start()
我有几个问题:
1)使用线程的想法是因为发送到服务器需要时间,我想继续
不间断地生成数据。
这段代码的问题是,如果我创建了线程 #3 并且它需要很长时间来处理,
到那时线程 #4 将启动。
我想确保每个列表都会由我创建的另一个列表发送到服务器,这意味着线程 #3 将在线程 #4 之前将数据发送到服务器。
我知道我需要使用队列,但我不知道具体如何使用。
2)我应该使用lst的副本吗?或者我也可以使用 lst,我不确定。
你想使用Queue
,python中的线程安全队列类。我想你想要一个线程将事物放入队列中,并有一个线程对它们进行连续操作,如下所示:
q = Queue.Queue()
t1 = threading.Thread(target=fill_q,args(q, lst))
t2 = threading.Thread(target=consume_q,args(q, lst))
t1.start()
t2.start()
def fill_q(q, lst):
for elem in lst:
q.put(elem)
def consume_q(q, lst):
for i in range(len(lst)):
send_to_server(q.get())
如果您对性能感兴趣,您可能需要阅读GIL
在Python中,这里https://wiki.python.org/moin/GlobalInterpreterLock https://wiki.python.org/moin/GlobalInterpreterLock
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)