1

有谁知道为什么下面的代码甚至不会打开 pylab 图形窗口?如果将测试函数的主体移至主进程,它可以正常工作,但我想专门从新进程中进行一些绘图。

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

将所有 GUI 语句(包括 import 语句)移至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 回答