[英]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'
它應該只分別運行p1
或p2
但兩個進程都在一個接一個地運行。
我的代碼有什么問題?
target
被分配了調用makepie
和makebar
的返回值,這會立即調用它們,在這種情況下相當於設置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.