加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 使用多线程在赋值之前引用的局部变量

发布时间:2020-12-20 11:43:06 所属栏目:Python 来源:网络整理
导读:用于添加和删除列表中的值的代码是在不同线程中执行的操作. 在多线程中使用这些全局变量: from threading import Threadimport timea=[]i = 0j = 0 thread1的函数: def val_in(): while 1: a.append(raw_input()) print "%s value at %d: %d added" % ( ti
用于添加和删除列表中的值的代码是在不同线程中执行的操作.

在多线程中使用这些全局变量:

from threading import Thread
import time

a=[]
i = 0
j = 0

thread1的函数:

def val_in():
    while 1:
        a.append(raw_input())
        print "%s value at %d: %d added" % ( time.ctime(time.time()),i,int(a[i])) // line 14
        i+=1

线程2的功能:

def val_out():
    while 1:
        time.sleep(5)
        try:
            print "%s value at %d: %d deleted" % (time.ctime(time.time()),j,int(a.pop(j)))
            i-=1
        except:
            print"no values lefts"
        time.sleep(2)

定义和启动线程:

t = Thread(target = val_in)
t1 = Thread(target= val_out)
t.start()
t1.start()

现在当输入为1时,它应该被添加到列表a中,但是有一个错误:

Error: Exception in thread Thread-1:
Traceback (most recent call last):
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py",line 810,in __bootstrap_inner
   self.run()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py",line 763,in run
   self.__target(*self.__args,**self.__kwargs)
  File "/Users/dhiraj.agarwal/Documents/workspace/try3/multithread.py",line 14,in val_in
UnboundLocalError: local variable 'i' referenced before assignment

解决方法

你应该告诉python我是全局的:

def val_in():
    global i
    ...

def val_out():
    global i
    ...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读