奇怪的错误:QObject::~QObject:无法从另一个线程停止计时器

2024-04-20 08:57:13 发布

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

就生成所需输出而言,此代码运行正常,但显示一条奇怪的错误消息:

QObject::~QObject: Timers cannot be stopped from another thread.

from multiprocessing import Pool,Manager
import matplotlib.pyplot as plt
import numpy as np
import time

def scatter_join(args):
    num = args[2]
    print(num)
    plt.scatter(args[0],args[1],s=1)
    plt.savefig('test_p'+str(num)+'.png')
    if args[3].empty() is False:
        args[4].acquire()
        (ax,fig) = args[3].get()
        ax.scatter(args[0],args[1],s=1)
        args[3].put((ax,fig))
        args[4].release()
    else:
        args[4].acquire()
        fig = plt.figure()
        ax = fig.add_subplot(111)
        ax.scatter(args[0],args[1],s=1)
        args[3].put((ax,fig))
        args[4].release()

    return None



if __name__ == '__main__':
    p = Pool()
    m = Manager()
    q = m.Queue()
    l = m.Lock()
    snap = []
    for looper in range(0,50):
        np.random.seed(int(time.time()))
        snap.append( np.random.normal(0+np.random.randint(-5,5),20+np.random.randint(-5,5),(10000,2)) )

    task = [(snap[x][:,0],snap[x][:,1],x,q,l) for x in range(0,50)]
    t = time.time()
    results = p.map(scatter_join,task,chunksize=18)

    p.close()
    p.join()
    print('Time Elapsed(Parallel): ', abs((time.time()-t)))

    (ax,fig) = q.get()
    fig.savefig('superimposedimg.png')


    t = time.time()
    for looper in range(0,50):
        print(looper)
        np.random.seed(int(time.time()))
        plt.scatter(snap[looper][:,0],snap[looper][:,1],s=1)
        plt.savefig('test_s'+str(looper)+'.png')
        plt.clf()
    print('Time Elapsed(Linear): ',abs(time.time()-t))

我基本上想在simgle matplotlib对象中使用多处理来绘制绘图图。在


Tags: importtimenpfigargspltrandomax
1条回答
网友
1楼 · 发布于 2024-04-20 08:57:13

在这样的绘图时,您需要确保后端 设置为agg后端。可以在matplotlibrc文件或 直接在打印脚本中,在导入matplotlib之后立即执行 在导入pyplot之前(如果您使用pyplot的话)。在

# do this before importing pylab or pyplot
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt

http://matplotlib.org/faq/howto_faq.html#howto-webapp

你也可以单独作图。例如:

^{pr2}$

注:因为我们在你不需要使用后关闭了这个情节图clf()清除。在

相关问题 更多 >