我想使用解释器中的原子操作在两个线程之间共享一个变量,如下所述http://effbot.org/zone/thread-synchronization.htm。核心数据类型的简单赋值(单字节码操作)应该是线程安全的,因为python<;3.2中的GIL就是这样。目前为止的理论。以下代码可以在主模式或从模式(-m或-s)下运行。主模式通过UDP发送数据。从模式创建一个线程,从udp端口读取数据,并在每个接收到的数据包上更新一个变量。
示例代码在创建时确实将共享变量作为参数传递给线程。我也尝试过使用全局变量或将线程本地存储传递给线程。
结果是一样的。在read_time_master线程内,变量被赋值。但在主线程中,共享变量的值不会更新。#!/usr/bin/env python
import socket
import itertools
import multiprocessing
from optparse import OptionParser
from time import sleep
PORT = 1666
def read_time_master(sock, time_master):
while True:
time_master = float(sock.recvfrom(1024)[0])
def main():
time_master = 0.0
p = OptionParser()
p.add_option('--master', '-m', action='store_true')
p.add_option('--slave', '-s', action=