在python

时间:2016-10-04 12:47:54

标签: python multithreading

我有大约4个输入文本文件,我想读取它们并将它们全部写入一个单独的文件中。 我使用两个线程,因此它运行得更快!
这是我在python中的问题和代码:

1 - 每个线程都有自己的变量版本,例如" lines"在函数内部" writeInFile"?

2 - 因为我从Tutorialspoint复制了代码的某些部分,所以我不明白什么是"而1:pass"在最后一行。你可以解释吗?链接到主要代码:http://www.tutorialspoint.com/python/python_multithreading.htm

3 - 我为线程延迟了什么?

4 - 如果我有大约400个输入文本文件,并希望在将它们全部写入单独的文件之前对它们进行一些操作,我可以使用多少个线程?

5-如果假设我使用10个线程,最好将输入放在不同的文件夹中(10个文件夹,每个文件夹有40个输入文本文件),并且每个线程调用一个文件夹或者我使用我在下面的代码中已经完成的操作如果其他线程之前没有读过它们,请让每个线程读取400个输入文本文件中的一个?



processedFiles=[] # this list to check which file in the folder has already been read by one thread so the other thread don't read it

#Function run by the threads
def writeInFile( threadName, delay):
   for file in glob.glob("*.txt"):

      if file not in processedFiles:
         processedFiles.append(file)
         f = open(file,"r")
         lines = f.readlines()
         f.close()

         time.sleep(delay)
         #open the file to write in
         f = open('myfile','a')
         f.write("%s \n" %lines) 
         f.close()
         print "%s: %s" % ( threadName, time.ctime(time.time()) )



# Create two threads as follows
try:
   f = open('myfile', 'r+')
   f.truncate()

   start = timeit.default_timer()

   thread.start_new_thread( writeInFile, ("Thread-1", 0, ) )
   thread.start_new_thread( writeInFile, ("Thread-2", 0, ) )
   stop = timeit.default_timer()

   print stop - start

except:
   print "Error: unable to start thread"


while 1:
   pass




1 个答案:

答案 0 :(得分:0)

  1. 是。每个局部变量都在线程的堆栈上,不在线程之间共享。
  2. 此循环允许父线程等待每个子线程完成并在程序终止之前退出。您应该使用的实际构造是join而不是while循环。见what is the use of join() in python threading
  3. 实际上,是的,特别是如果线程正在写入一组公共文件(例如,线程1和线程2都将读/写同一文件)。根据硬件,文件大小和您尝试写入的数据量,不同的延迟可能会使您的程序对用户的响应能力更强。最好的办法是从一个简单的值开始,并在您看到该程序在真实环境中工作时进行调整。
  4. 虽然您可以在技术上使用任意数量的线程,但通常每个CPU每个核心超过1个线程不会获得任何性能优势。
  5. 不同的文件夹对于400个文件来说无关紧要。如果您正在谈论4,000,000个文件,那么当您想要在这些目录上执行ls时,这可能很重要。对性能至关重要的是每个线程是否正在处理它自己的文件,或者两个或多个线程是否可能在同一个文件上运行。
  6. 一般思考:虽然它是一种更高级的架构,但您可能希望尝试在生产环境http://www.celeryproject.org/中学习/使用芹菜来完成这些类型的任务。