小编JDD*_*JDD的帖子

单一生产者多个消费者

我希望在执行多线程编程时,在Python中拥有一个单一的生产者,多个消费者体系结构.我希望有这样的操作:

  1. 制作人生成数据
  2. 消费者1 .. N(N是预先确定的)等待数据到达(阻止),然后以不同方式处理SAME数据.

所以我需要所有消费者从生产者那里获得相同的数据.

当我使用Queue执行此操作时,我意识到除了第一个消费者之外的所有人都会因为我的实现而受到匮乏.

一种可能的解决方案是为每个消费者线程建立唯一的队列,其中生产者在多个队列中推送相同的数据.有一个更好的方法吗 ?

from threading import Thread
import time
import random
from Queue import Queue

my_queue = Queue(0)

def Producer():
    global my_queue
    my_list = []
    for each in range (50):
        my_list.append(each)
    my_queue.put(my_list)

def Consumer1():
    print "Consumer1"
    global my_queue
    print my_queue.get()
    my_queue.task_done()

def Consumer2():
    print "Consumer2"
    global my_queue
    print my_queue.get()
    my_queue.task_done()


P = Thread(name = "Producer", target = Producer)

C1 = Thread(name = "Consumer1", target = Consumer1)

C2 = Thread(name = "Consumer2", target = Consumer2) …
Run Code Online (Sandbox Code Playgroud)

python queue multithreading

6
推荐指数
1
解决办法
4238
查看次数

Python:将2个int转换为float

我一直在尝试将一组2个16位整数转换为单个32位浮点数.这是我在MODBUS通信协议上的工作.我的查询与此处提到的相同

但是,当我按照那里提供的打包/解压缩方法时,我没有得到类似的结果.

这是我的测试程序:

from struct import *

tup=(16256, 0)

print hex(tup[0])
print hex(tup[1])

mypack = pack('>HH',tup[0],tup[1])
print mypack

f = unpack('f', mypack)[0]
print f
Run Code Online (Sandbox Code Playgroud)

输出如下:

0x3f80
0x0
?
4.60060298822e-41
Run Code Online (Sandbox Code Playgroud)

我希望最终输出实际上只是'1.0',因为'0x3F800000'的浮点解释就是这样!

我在由Debian OS驱动的Beagle Bone Black板上运行此代码.

我哪里错了?

python floating-point modbus unpack pack

2
推荐指数
1
解决办法
1446
查看次数

标签 统计

python ×2

floating-point ×1

modbus ×1

multithreading ×1

pack ×1

queue ×1

unpack ×1