小编tur*_*ine的帖子

在python中的两个线程之间共享一个变量

我想在解释器中使用原子操作在两个线程之间共享一个变量,如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='store_true')
    options, arguments = p.parse_args()
    if options.master or options.slave:
        sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, 0)
    if options.master:
        sock.connect(('127.0.0.1', PORT))
    if options.slave:
        sock.bind(('0.0.0.0', PORT))
        recv_thread = multiprocessing.Process(target=read_time_master, args=(sock, time_master))
        recv_thread.start()

    for time in itertools.count():
        print time …
Run Code Online (Sandbox Code Playgroud)

python multithreading

0
推荐指数
1
解决办法
5724
查看次数

标签 统计

multithreading ×1

python ×1