我正在尝试通过 while(True) 在 Python 中循环它来计算函数返回 True 的概率,但我无法让它工作
I'm trying to calculate a probability of a function returning True by while(True) looping it in Python but I can't get it to work
我正在尝试计算模拟任意事件的预定义函数的概率。是否有图书馆可以这样做或有更好的方法?
from multiprocessing import cpu_count
import multiprocessing
def play_event():
"predefined function which either returns True or False"
def process(total_events, favorable_results, lock):
while(True):
event = play_event()
with lock:
total_events += 1
if(event == True):
favorable_results += 1
if __name__ == "__main__":
seed(1)
manager = multiprocessing.Manager()
lock = manager.Lock()
number_processes = cpu_count()
total_events = manager.Value(int, 0)
favorable_results = manager.Value(int, 0)
jobs = []
for i in range(number_processes):
p = multiprocessing.Process(target=process, args=(total_events, favorable_results, lock))
jobs.append(p)
p.start()
while(True):
if(total_events.value > 0):
print(Decimal(favorable_results.value)/total_events.value)
现在我收到错误:TypeError: unsupported operand type(s) for +=: 'ValueProxy' and 'int',在处理函数中,当我将 1 添加到 total_events。不幸的是,我不认为这是唯一的错误。在我没有得到这个错误之前 total_events.value 一直是 1.
使用total_events.get()
获取当前值,使用total_events.set(x)
将值设置为x
。 - 约翰·戈登
他的回答在我问题的回复里。
我正在尝试计算模拟任意事件的预定义函数的概率。是否有图书馆可以这样做或有更好的方法?
from multiprocessing import cpu_count
import multiprocessing
def play_event():
"predefined function which either returns True or False"
def process(total_events, favorable_results, lock):
while(True):
event = play_event()
with lock:
total_events += 1
if(event == True):
favorable_results += 1
if __name__ == "__main__":
seed(1)
manager = multiprocessing.Manager()
lock = manager.Lock()
number_processes = cpu_count()
total_events = manager.Value(int, 0)
favorable_results = manager.Value(int, 0)
jobs = []
for i in range(number_processes):
p = multiprocessing.Process(target=process, args=(total_events, favorable_results, lock))
jobs.append(p)
p.start()
while(True):
if(total_events.value > 0):
print(Decimal(favorable_results.value)/total_events.value)
现在我收到错误:TypeError: unsupported operand type(s) for +=: 'ValueProxy' and 'int',在处理函数中,当我将 1 添加到 total_events。不幸的是,我不认为这是唯一的错误。在我没有得到这个错误之前 total_events.value 一直是 1.
使用total_events.get()
获取当前值,使用total_events.set(x)
将值设置为x
。 - 约翰·戈登
他的回答在我问题的回复里。