我有以下代码:
导入线程
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,我不确定。
答案 0 :(得分:1)
你想使用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())
如果您对性能感兴趣,可能需要阅读python中的GIL
,https://wiki.python.org/moin/GlobalInterpreterLock