1

以下のコードが pylab の Figure ウィンドウさえ開かない理由を誰か知っていますか? テスト関数の本体がメイン プロセスに移動された場合は正常に動作しますが、具体的には新しいプロセス内からいくつかのプロットを実行したいと考えています。

from multiprocessing import Process
from pylab import *

def test():
    frac = [10, 10, 10, 10, 10, 10, 40]
    labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
    ion()
    hold(False)
    while True:
        pie(frac, labels = labels, autopct='%1.1f%%')
        title('test', bbox={'facecolor' : '0.8', 'pad' : 5})
        draw()


p1 = Process(target = test)
p1.daemon = True
p1.start()

while True:
    pass
4

2 に答える 2

0

import ステートメントを含むすべての GUI ステートメントを次の場所に移動しますtest

import multiprocessing as mp

def test():
    import matplotlib.pyplot as plt
    frac = [10, 10, 10, 10, 10, 10, 40]
    labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
    plt.pie(frac, labels = labels, autopct='%1.1f%%')
    plt.title('test', bbox={'facecolor' : '0.8', 'pad' : 5})
    plt.show()    

p1 = mp.Process(target = test)
p1.daemon = True
p1.start()
p1.join()

p1.join()の代わりに使用しwhile True: passます。CPU への負荷がはるかに低くなります。

最後に、アニメーションを正しく行う方法の例については、 Matplotlib アニメーション クックブックを必ずお読みください。

于 2013-06-23T17:23:56.507 に答える
0

元のコードが CPU を食い尽くすため、数値が表示されないのはなぜですか。主に while(1) ループを取り除くために、コードを少し変更しました。これはうまくいきますか?

from multiprocessing import Process
from pylab import *

def test():
    frac = [10, 10, 10, 10, 10, 10, 40]
    labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
    ion()
    hold(False)
    pie(frac, labels = labels, autopct='%1.1f%%')
    title('test', bbox={'facecolor' : '0.8', 'pad' : 5})
    draw()

p1 = Process(target = test)
p1.daemon = True
p1.start()

import time
time.sleep(5)
于 2013-06-23T17:24:25.403 に答える