簡體   English   中英

兩個獨立的進程沒有同時運行

[英]Two independent processes are not running simultaneously

我編寫了一個程序來分析 StackOverflow 2019 開發人員調查(.csv)文件並使用 Matplotlib 來呈現數據。

下面是我的代碼:

import multiprocessing
from matplotlib import pyplot as plt
import re
import analyze
import deleteCache


def makepie(countries, contributors):
    plt.style.use('fivethirtyeight')
    plt.title(
        'Top 5 Countries With Contribution IN Open Source Softwares(OSS)')
    plt.pie(contributors, labels=countries, shadow=True,
            startangle=90,
            autopct='%2.2f%%',
            wedgeprops={
                'edgecolor': 'black'})
    plt.tight_layout()
    plt.show()


def makebar(countries, contributors):
    index = range(1, 6)
    plt.style.use('fivethirtyeight')
    plt.title(
        'Top 5 Countries With Contribution IN Open Source Softwares(OSS)')
    plt.bar(index, contributors)
    plt.xlabel('Countries')
    plt.ylabel('Contributors')
    plt.xticks(ticks=index, labels=countries)
    plt.show()


def getdata():
    pattern = re.compile(r'([A-Za-z ]+),(\d+)')
    countries = []
    contributors = []
    with open(file='Top5ContributingCountries.csv', mode='r', encoding='utf-8') as f:
        for line in f:
            search = pattern.match(line)
            countries.append(search.group(1))
            contributors.append(int(search.group(2)))
    print('Enter Your Choice')
    print(f'1 For Pie Chart\n2 For Bar Chart\n3 For Both')
    option = input()
    if(option == '1'):
        makepie(countries, contributors)
    elif(option == '2'):
        makebar(countries, contributors)
    else:
        makepie(countries, contributors)
        makebar(countries, contributors)


if __name__ == "__main__":
    analyze.analyzedata()
    getdata()
    deleteCache.deleteCache()

我在 getdata() 中實現了多線程:

def getdata():
    pattern = re.compile(r'([A-Za-z ]+),(\d+)')
    countries = []
    contributors = []
    with open(file='Top5ContributingCountries.csv', mode='r', encoding='utf-8') as f:
        for line in f:
            search = pattern.match(line)
            countries.append(search.group(1))
            contributors.append(int(search.group(2)))
    print('Enter Your Choice')
    print(f'1 For Pie Chart\n2 For Bar Chart\n3 For Both')
    option = input()
    p1=multiprocessing.Process(target=makepie(countries, contributors))
    p2=multiprocessing.Process(target=makebar(countries, contributors))
    if(option == '1'):
        p1.start()
    elif(option == '2'):
        p2.start()
    else:
        p1.start()
        p2.start()

但是如果option='3' ,餅圖和條形圖不會同時打開。 如果option='1'option='2'它應該只分別運行p1p2但兩個進程都在一個接一個地運行。

我的代碼有什么問題?

target被分配了調用makepiemakebar的返回值,這會立即調用它們,在這種情況下相當於設置target=None target應分配為 function, args應分配為 arguments:

p1=multiprocessing.Process(target=makepie,args=(countries, contributors))
p2=multiprocessing.Process(target=makebar,args=(countries, contributors))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM