Python 用几个线程写入列表,用另一个线程读取
嗨,我有一个多线程的问题。 我试图做的是通过http请求获取一些数据。目前我想从3个Web服务器获取数据。我正在使用python中的线程模块 我现在要做的是将数据写入数组并对其进行排序Python 用几个线程写入列表,用另一个线程读取,python,multithreading,Python,Multithreading,嗨,我有一个多线程的问题。 我试图做的是通过http请求获取一些数据。目前我想从3个Web服务器获取数据。我正在使用python中的线程模块 我现在要做的是将数据写入数组并对其进行排序 Thread0 writes data to array[0] Thread1 writes data to array[1] Thread2 writes data to array[2] 只有当从Web服务器获取的数据发生更改时,才会发生这种情况。 thread4应该在数组发生更改时复制该数组并对其进行排序
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()
到目前为止,我还没有在阅读网站上工作过。
你怎么认为?
写入列表的不同索引应该是线程安全的,还是我错了?
但是我如何向另一个线程发出列表值已更改的信号呢?
目前我得到一个错误
“名称错误:未定义全局名称‘我的列表’”
为什么
我希望你们中的一些人能提供帮助,并觉得这很有趣。
您可以使用队列模块在多个线程之间安全地交换信息。
在模块描述的末尾有一个很好的例子。好的,谢谢你让我看了一下队列。就我所理解的概念而言,我正在队列末尾进行同步。但是我想要的是,我想我忘了这是一遍又一遍地运行我的3个线程(包含在“while True”中)lopp并希望访问他们正在创建的阵列而不被阻塞太长时间。队列似乎更像是一个任务列表,线程将一直工作到完成。但我不希望它们完成…没有更好的方法吗?问题是,如果一个Web服务器发送的答案比其他服务器晚很多,那么我就被阻塞了一段时间。我不要这个