嗨,我遇到了多线程问题。 我想要做的是获取一些带有http请求的数据。目前我想从3个网络服务器获取数据。我在python中使用了线程模块。
我现在要做的是将数据写入数组并对其进行排序。
Thread0 writes data to array[0]
Thread1 writes data to array[1]
Thread2 writes data to array[2]
仅当从Web服务器获取的数据发生更改时才会发生这种情况。 thread4应该在更改后复制该数组并对其进行排序,然后对副本进行一些处理。
这是我的计划。如何在不阻止其他线程的写操作的情况下执行此操作,以及如何在读取数据时确保数据不会出现不一致。
这是我对这个想法的了解。
这是一个线程的模块:
import threading
class http_fetcher(threading.Thread):
_idx_of_list = []
def set_idx(self,idx)
self._idx_of_list = idx
def run(self)
global my_list
#some http fetching stuff
old_data = []
if old_data != actual_data:
old_data = actual_data
my_list[self._idx_of_list] = actual_data
这是调用主程序
if __name__ == "__main__":
my_list = []
thread1 = http_fetcher()
thread1.set_idx(1)
thread1.start()
thread2 = http_fetcher()
thread2.set_idx(2)
thread2.start()
thread3 = http_fetcher()
thread3.set_idx(3)
thread3.start()
到目前为止,我还没有在阅读网站上工作过。 你怎么看? 写入列表的不同索引应该是线程安全的还是我错了? 但是,如何通知另一个线程列表值已更改? 目前我收到一个错误 “NameError:全局名称'my_list'未定义” 为什么?
我希望你们中的一些人可以提供帮助并找到这个有趣的
此致
答案 0 :(得分:0)
https://docs.python.org/2/library/queue.html#module-Queue
您可以使用队列模块在多个线程之间安全地交换信息。 模块描述结束时有一个很好的例子。
答案 1 :(得分:0)
好的我终于尝试了队列,经过一些调整后它确实有效