0
我有一些代码很好地工作。这是一个通过日期列表的while循环,在我的硬盘上找到与这些日期相对应的文件,对这些文件进行一些计算,然后使用以下命令输出到“results.csv”文件:蟒蛇,多线程,安全地使用普通文件上的熊猫“to_csv”?
my_df.to_csv("results.csv",mode = 'a')
我想知道是否可以安全地为每个日期创建一个新的线程,并在几个日期一次调用while循环中的东西?
我的代码:
import datetime, time, os
import sys
import threading
import helperPY #a python file containing the logic I need
class myThread (threading.Thread):
def __init__(self, threadID, name, counter,sn, m_date):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
self.counter = counter
self.sn = sn
self.m_date = m_date
def run(self):
print "Starting " + self.name
m_runThis(sn, m_date)
print "Exiting " + self.name
def m_runThis(sn, m_date):
helperPY.helpFn(sn,m_date) #this is where the "my_df.to_csv()" is called
sn = 'XXXXXX'
today=datetime.datetime(2016,9,22) #
yesterday=datetime.datetime(2016,6,13)
threadList = []
i_threadlist=0
while(today>yesterday):
threadList.append(myThread(i_threadlist, str(today), i_threadlist,sn,today))
threadList[i_threadlist].start()
i_threadlist = i_threadlist +1
today = today-datetime.timedelta(1)
我必须在调用helperFn()之前/之后获取/释放锁吗? –
如果你使用'with'子句进行操作,则锁定在进入该模块时获取,并在退出时自动释放。但是,只有当它只包装了一些代码时,锁才有用。如果你所有的工作都是在'helperFn'内完成的,并且你锁定了'helperFn'的全部内容,那么你已经击败了该池的任何优势。 – tdelaney
理论上这是不安全的,但实际上Python的线程受到全局解释器锁定的限制。除非代码偏离到释放这个锁的C扩展,否则即使线程模块也在排队,我相信这应该使IO安全。意见? – Mai