小编phi*_*ree的帖子

多线程在python中修改全局列表

我想在一个线程中每2秒将一个项目添加到全局列表中,并将列表保存到数据库中,然后在另一个线程中每3秒将其清空。

我创建了两个局部变量来监视添加的项总数和保存的项总数,它们应该每6秒钟相等,但事实并非如此。这是我的代码:

import datetime
import psutil,os,time
from threading import *
class AddToList(Thread):
    totalAdded=0
    def run(self):
        lock=RLock()
        lock.acquire()
        while True:
            entryList.append("AddToList at "+str(datetime.datetime.now()))
            self.totalAdded=self.totalAdded+len(entryList)
            print("totalAdded:"+str(self.totalAdded))
            time.sleep(2)
        lock.release()
class SaveList(Thread):
    totalSaved=0
    '''save entry to server'''
    def __init__(self):
        Thread.__init__(self)
    def run(self):
        lock=RLock()
        lock.acquire()
        while True:
            #save list to database,then empty the list
            self.totalSaved=self.totalSaved+len(entryList)
            del entryList[:]
            print("totalSaved:"+str(self.totalSaved))
            time.sleep(3)
        lock.release()

if __name__=="__main__":
    global entryList
    entryList=[]
    addClass= AddToList()
    addClass.start()
    saveClass=SaveList()
    saveClass.start()
Run Code Online (Sandbox Code Playgroud)

结果:

totalAdded:2
totalSaved:2
totalAdded:3
totalSaved:3totalAdded:4

totalAdded:6
totalSaved:5
totalAdded:7
totalSaved:6
totalAdded:8
totalAdded:10
totalSaved:8
totalAdded:11
totalSaved:9
totalAdded:12 …
Run Code Online (Sandbox Code Playgroud)

python multithreading locking

5
推荐指数
1
解决办法
2701
查看次数

标签 统计

locking ×1

multithreading ×1

python ×1