multiprocessing.value清晰的语法?

Pol*_*lux 10 python multiprocessing

我想使用multiprocessing.Value在多个进程中使用变量,但Python的文档中的语法并不清楚.任何人都可以告诉我应该使用什么作为类型(我的变量是一个字母),以及在哪里放置我的变量的名称?

编辑

我尝试使用管理器在进程之间共享我的信件.但我现在唯一拥有的是Value('ctypes.c_char_p', '(你在这里点击的键)') 在Python Shell中打印但仍然没有声音.使用管理器时,控制台似乎比平常慢一点.在我按键和Value屏幕上显示之间有几乎一秒的延迟.

我的代码现在看起来像这样:

#Import 
from tkinter import * 
import wave 
import winsound 
import multiprocessing 

#Functions 

def key(event):

     temp = event.char
     manager = multiprocessing.Manager()
     manager.Value(ctypes.c_char_p, temp)
     hitkey = manager.Value(ctypes.c_char_p, temp)
     instance = multiprocessing.Process(target=player, args=(hitkey,)) 
     instance.start()



def player(hitkey):
     print(hitkey + "1")
     winsound.PlaySound(hitkey + '.wav', winsound.SND_FILENAME|winsound.SND_NOWAIT|winsound.SND_ASYNC) 


if __name__ == "__main__":



     #Initialisation 
     fenetre = Tk() 
     frame = Frame(fenetre, width=200, height=100)
     #TK

     frame.focus_set()
     frame.bind("<Key>", key)
     frame.pack()
     fenetre.mainloop()
Run Code Online (Sandbox Code Playgroud)

Bak*_*riu 12

没有特殊的语法multiprocessing.Value,它只是一个类似于任何其他的类.该签名的的Value构造函数是非常清楚描述:

multiprocessing.Value(typecode_or_type, *args[, lock])

返回ctypes从共享内存分配的对象.默认情况下,返回值实际上是对象的同步包装器.

typecode_or_type确定返回对象的类型:它是模块使用的ctypes类型或单字符类型代码array.*args传递给类型的构造函数.

如果lockTrue(默认值),则创建新的锁定对象以同步对值的访问.如果lock是a LockRLockobject,那么将用于同步对值的访问.如果lock是,False则对锁定不会自动保护对返回对象的访问,因此它不一定是"过程安全的".

你甚至有一些事后使用的例子.特别地,它typecode_or_type可以是array模块文档中列出的一个类型代码(例如,'i'对于有符号整数,'f'对于浮点数等)或ctypes类型等ctypes.c_int.

如果您想要Value包含单个字母,您可以执行以下操作:

>>> import multiprocessing as mp
>>> letter = mp.Value('c', 'A')
>>> letter
<Synchronized wrapper for c_char('A')>
>>> letter.value
'A'
Run Code Online (Sandbox Code Playgroud)

更新

你的代码的问题是typecode 'c'意味着字符不是字符串.如果要保存字符串,可以使用以下类型ctypes.c_char_p:

>>> import multiprocessing as mp
>>> import ctypes
>>> v = mp.Value('c', "Hello, World!")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/multiprocessing/__init__.py", line 253, in Value
    return Value(typecode_or_type, *args, **kwds)
  File "/usr/lib/python2.7/multiprocessing/sharedctypes.py", line 99, in Value
    obj = RawValue(typecode_or_type, *args)
  File "/usr/lib/python2.7/multiprocessing/sharedctypes.py", line 73, in RawValue
    obj.__init__(*args)
TypeError: one character string expected
>>> v = mp.Value(ctypes.c_char_p, "Hello, World!")
>>> v
<Synchronized wrapper for c_char_p(166841564)>
>>> v.value
'Hello, World!'
Run Code Online (Sandbox Code Playgroud)