如何在python中优化多重处理?

2024-06-07 03:04:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我第一次尝试在python中运行多处理,但是当我在PyCharm中调试时,我看到线程8正在等待一个锁,我相信这就是我的代码正在减速的地方。我考虑过在while循环中映射进程池,但这样做似乎是多余的。我说的对吗?你知道吗

import random
import time
import math
import multiprocessing as mp  # alias

# from multiprocessing.dummy import Pool as ThreadPool

# initial sequence:
# HHTHTHHHTHHHTHTH

coinChoices = ["H", "T"]  # choices
idealFlip = "HHTHTHHH"    # string to match
flip = ""                 # resets flip

margin_error = 0.1  # accuracy
num_matches = 0.0   # matched strings
probability = 0     # calc. probability
counter = 0         # iterations
flag = 1            # exit token
secondFlag = 1

check = math.ceil(pow(2, len(idealFlip))/2)  # used for printing prob

# flips a coin  *NOT USED*
def flip_coin(coins):
    return str(random.choice(coins))


# requests (num) tasks to be completed
def flip_coin_num(num):
    return str(random.choice(coinChoices))


# theoretical probability
def compute_probability():
    size = len(idealFlip)
    return math.pow(0.5, size)


# actual probability
def empirical_probability(count, num_flips):
    return count / num_flips


# TODO: implement multiprocessing
if __name__ == "__main__":
    # print("# cores: %d" % mp.cpu_count())

    probability = compute_probability()
    print("\nInitial probability of landing on the sequence: " + str(probability) + "\n")

    actualProb = 0
    empiricalProb = 0

    tasks = range(len(idealFlip))
    pool = mp.Pool(processes=4)


    while flag != 0 or counter == 1000:

        temp = pool.map(flip_coin_num, tasks)


        # add other processes?
        # handles close / join


        flip = "".join(temp)
        # print(temp)
        # print(flip)

        if counter != 0:
            empiricalProb = empirical_probability(num_matches, counter)
        if flip == idealFlip:
            num_matches += 1

        counter += 1
        flip = ""

        if counter % check is 0:
            print("Probability" + str(empricalProb))

Tracking of threads


Tags: importreturnifdefcounterrandommathmultiprocessing