就生成所需输出而言,此代码运行正常,但显示一条奇怪的错误消息:
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对象中使用多处理来绘制绘图图。在
在这样的绘图时,您需要确保后端 设置为agg后端。可以在matplotlibrc文件或 直接在打印脚本中,在导入matplotlib之后立即执行 在导入pyplot之前(如果您使用pyplot的话)。在
http://matplotlib.org/faq/howto_faq.html#howto-webapp
你也可以单独作图。例如:
^{pr2}$注:因为我们在你不需要使用后关闭了这个情节图clf()清除。在
相关问题 更多 >
编程相关推荐