【发布时间】:2022-01-17 13:30:36
【问题描述】:
我做了一个 Python 脚本来模拟一个骰子,然后计算相对频率。
我想,为什么不让它多线程呢?现在我被变量困住了。如果我运行它,就像最后一个线程会覆盖所有其他结果,所以它将运行多线程但只获取最后一个线程的结果。根据您的需要修改变量尝试,它设置为 8,因此您看到只有 2 个随机数被采用并在最后计算为百分比。不要修改 NrThreads,因为它总是从 4 开始。
import threading
import random
### CONFIGURE
tries=8
NrThreads=4
triesThread=round(round(tries)/4)
###\CONFIGURE
def ThreadCode():
global one
global two
global three
global four
global five
global six
one=0
two=0
three=0
four=0
five=0
six=0
for i in range(0, triesThread):
number=random.randint(1,6)
if (number == 1):
one=one+1
if (number == 2):
two=two+1
if (number == 3):
three=three+1
if (number == 4):
four=four+1
if (number == 5):
five=five+1
if (number == 6):
six=six+1
thread1 = threading.Thread(target=ThreadCode)
thread1.start()
print("Started thread")
thread2 = threading.Thread(target=ThreadCode)
thread2.start()
print("Started thread")
thread3 = threading.Thread(target=ThreadCode)
thread3.start()
print("Started thread")
thread4 = threading.Thread(target=ThreadCode)
thread4.start()
print("Started thread")
thread1.join()
thread2.join()
thread3.join()
thread4.join()
print("Number 1: ", one)
print("Number 2: ", two)
print("Number 3: ", three)
print("Number 4: ", four)
print("Number 5: ", five)
print("Number 6: ", six)
p1=one/tries
print("Probability for number 1: ", p1)
for i in ([one, two, three, four, five, six]):
print(i/tries," ", i/tries*100,"%")
【问题讨论】:
-
如果您这样做是为了了解 python 中的并行性,@bharel 的答案很好,如果您想了解统计/随机性,那么我建议您查看Multinomial distribution (e.g. in numpy),这将以更少的代码更高效地完成此任务
标签: python-3.x random global-variables python-multithreading