python在活动线程之间共享变量

时间:2014-05-28 21:59:26

标签: python multithreading variables global-variables

我有一个程序,它通过串行端口运行相机进行一定数量的曝光和一定长度的曝光。程序与提供错误值的服务器通信,如果错误值在可接受的范围内,则开始曝光并且倒计时时钟运行直到曝光结束。以下变量用于实现此目的。

T =“以秒为单位的曝光时间” N =“曝光次数”

然后while循环使用以下

运行程序
    def countdown(n):
       for i in range(int(n)):
        c = int(n) - int(i)
        print c ,'seconds left','\r',
        time.sleep(1)  

While x < T loop: 
        countdown(n)

我想运行一个不断从服务器探测错误编号的线程,如果错误编号增大到大,它会更改为i的值等于n。

def errortest():
                    test=struct.pack("B",10)
                    s.send(test)
                    data = s.recv(BUFFER_SIZE)
                    if ord(data) < (75) and ord(data) > 0:
                        print ord(data)
                        time.sleep(5)
                    else:
                        print ("error! Stopping exposure")
                        i=n

我的问题是函数之间没有共享变量。我将“i”和“n”设置为全局变量取得了一些成功,但这也导致了其他问题,具体取决于我调用或编写不同函数的顺序。我也试过返回i = n,但是n不是共享的。这是一个特别的问题,因为两个线程同时运行而不共享变量。这就是为什么我不能让队列工作,因为它在q.get()的每个实例上暂停for循环。

有没有比使用全局变量在作为并发线程运行的函数之间共享变量值更好的方法?

1 个答案:

答案 0 :(得分:1)

您可能想尝试在class内共享变量。如果你谷歌的话,你会发现很多tutorials。如果您想将任务分配到不同的程序中,xmlrpc是一种简单的可能性。