python多简单_Python多处理简单的方法来实现一个简单的计...

价值确实是可变的;您可以从ctypes模块指定所需的数据类型,然后可以对其进行更改.这是一个完整的,有效的脚本,用于演示:

from time import sleep

from ctypes import c_int

from multiprocessing import Value, Lock, Process

counter = Value(c_int) # defaults to 0

counter_lock = Lock()

def increment():

with counter_lock:

counter.value += 1

def do_something():

print("I'm a separate process!")

increment()

Process(target=do_something).start()

sleep(1)

print counter.value # prints 1, because Value is shared and mutable

编辑:Luper在下面的评论中正确指出默认情况下值值被锁定.这是正确的,即使赋值包含多个操作(例如分配可能包含许多字符的字符串),那么这个赋值是原子的.但是,当递增计数器时,您仍然需要我的示例中提供的外部锁,因为递增加载当前值然后递增它然后将结果分配回值.

因此,如果没有外部锁定,您可能会遇到以下情况:

>进程1(原子地)读取计数器的当前值,然后递增它

>在进程1可以将递增的计数器分配回值之前,发生上下文切换

>进程2(原子地)读取计数器的当前(未增加的)值,将其递增,并将递增的结果(原子地)返回给值

>过程1分配其增量值(原子地),吹走过程2执行的增量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值