Python按顺序执行线程

时间:2016-02-07 12:55:39

标签: python multithreading operating-system thread-safety message-queue

我有以下代码:

导入线程

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,我不确定。

1 个答案:

答案 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中的GILhttps://wiki.python.org/moin/GlobalInterpreterLock