在python中同时执行方法

在python中同时执行方法,python,Python,在下面的代码中,我希望saveData函数同时执行48次。我使用线程来实现这一点,但程序没有保存文件,而是打印经过的时间,并在执行后立即退出。为什么不执行saveData函数?我怎样才能做到这一点 #!/usr/bin/env python import sys import numpy as np import h5py import scipy from PIL import Image import timeit import thread import matplotlib.pypl

在下面的代码中,我希望saveData函数同时执行48次。我使用线程来实现这一点,但程序没有保存文件,而是打印经过的时间,并在执行后立即退出。为什么不执行saveData函数?我怎样才能做到这一点

#!/usr/bin/env python
import sys

import numpy as np
import h5py
import scipy
from PIL import Image
import timeit
import thread

import matplotlib.pyplot as plt

def saveImage(array, filename):
  fig=plt.figure(figsize=(4,3))
  ax=fig.add_subplot(1,1,1)
  plt.axis('off')
  p = plt.imshow(array)
  p.set_cmap('gray')
  extent = ax.get_window_extent().transformed(fig.dpi_scale_trans.inverted())
  plt.savefig(filename, bbox_inches=extent) 

def saveData(value1, value2, value3, dset):
  filename = "tomo1_" + str(value1) + ".png" 
  data = dset[value1,:,:]
  saveImage(data, filename)
  filename = "tomo2_" + str(value2) + ".png" 
  data = dset[:,value2,:]
  saveImage(data, filename)
  filename = "tomo3_" + str(value3) + ".png" 
  data = dset[:,:,value3]
  saveImage(data, filename)

def run():

  # Reopen the file and dataset using default properties.
  f = h5py.File(sys.argv[1])
  dset = f[sys.argv[2]]

  dim1 = len(dset)
  dim2 = len(dset[0])
  dim3 = len(dset[0][0])

  slice1 = 0
  slice2 = 0
  slice3 = 0
  factor1 = dim1/48
  factor2 = dim2/48
  factor3 = dim3/48
  tic=timeit.default_timer()
  for i in range(0,48):
    thread.start_new_thread(saveData,(slice1, slice2, slice3, dset))
    slice1 = slice1 + factor1
    slice2 = slice2 + factor2
    slice3 = slice3 + factor3

  toc=timeit.default_timer()
  print "elapsed time: " + str(toc - tic)

if __name__ == "__main__":
    run()        

首先,建议您使用更友好的模块“线程”,而不是低级模块“线程”

其次,您需要等待线程完成其工作。如果您使用threading.Thread对象,那么它有一个“join”方法,您可以使用该方法确保在代码进行之前线程已经完成

请看以下答案,以获取示例:


首先,建议您使用更友好的模块“线程”,而不是低级模块“线程”

其次,您需要等待线程完成其工作。如果您使用threading.Thread对象,那么它有一个“join”方法,您可以使用该方法确保在代码进行之前线程已经完成

请看以下答案,以获取示例:


首先,建议您使用更友好的模块“线程”,而不是低级模块“线程”

其次,您需要等待线程完成其工作。如果您使用threading.Thread对象,那么它有一个“join”方法,您可以使用该方法确保在代码进行之前线程已经完成

请看以下答案,以获取示例:


首先,建议您使用更友好的模块“线程”,而不是低级模块“线程”

其次,您需要等待线程完成其工作。如果您使用threading.Thread对象,那么它有一个“join”方法,您可以使用该方法确保在代码进行之前线程已经完成

请看以下答案,以获取示例:


当前的问题是,父线程已完成,但不检查是否还有子线程仍在运行,这些子线程将以这种方式被静默终止!我建议采取以下办法:

使用
导入线程

更改线程代码:

thread.start_new_thread(saveData,(slice1, slice2, slice3, dset))


类似的回答。

当前的问题是父线程完成,但不检查是否还有子线程仍在运行,这些子线程以这种方式被静默终止!我建议采取以下办法:

使用
导入线程

更改线程代码:

thread.start_new_thread(saveData,(slice1, slice2, slice3, dset))


类似的回答。

当前的问题是父线程完成,但不检查是否还有子线程仍在运行,这些子线程以这种方式被静默终止!我建议采取以下办法:

使用
导入线程

更改线程代码:

thread.start_new_thread(saveData,(slice1, slice2, slice3, dset))


类似的回答。

当前的问题是父线程完成,但不检查是否还有子线程仍在运行,这些子线程以这种方式被静默终止!我建议采取以下办法:

使用
导入线程

更改线程代码:

thread.start_new_thread(saveData,(slice1, slice2, slice3, dset))

类似的回答