我目前正在使用一个简单的程序来测试列表的功能,当涉及到我正在处理的单独网络分配的线程时。我的主要目标是查看列表是否可以是全局的,如果在开始时创建,在所有函数之外,并确保锁按我预期的方式工作。
我目前只有一个项目,旨在允许我将项目附加到列表中,然后让另一个线程每隔几秒钟将列表读回给我,以查看这些更改是否通过。我最近的问题是我不完全理解为什么传递给目标函数的参数必须是可迭代的,而不仅仅是一个对象。
我还发现你必须明确地将锁传递给每个函数,这有点奇怪。目前它没有给我任何错误,但有某种逻辑错误使程序只是坐着什么也不做。
import threading
import time
myList = ["Default"]
lock = threading.Lock()
def fillList(lock):
while True:
("Append item to list: ")
lock.acquire()
myList.append(input())
lock.release()
def readList(lock):
while True:
time.sleep(5)
lock.acquire()
for i in myList:
print(i)
lock.release()
t1 = threading.Thread(target=fillList, args=[lock])
t2 = threading.Thread(target=readList, args=[lock])
t1.start()
t2.start()
t1.join()
t2.join()
这是我迄今为止所尝试的,起初这似乎是一个简单的想法,但我遇到了很多陷阱。我的网络项目的很多设计都依赖于使用一些平行列表来保留大量用户数据,但如果另一种数据结构可能更好,我愿意相信。