答案 0 :(得分:2)
您可以这样做:
import threading
def thread_function(df):
df.to_csv()
def blue_function(df):
thread = threading.Thread(target=thread_function, args=(df,))
thread.start()
在文档中,不必调用thread.join()
等待其完成,因为:
主线程不是守护程序线程,因此在主线程中创建的所有线程默认为daemon = False。没有活动的非守护线程时,整个Python程序将退出。
编辑:
这样做,您会为过程生成一个新的Thread。这使OS可以独立安排过程的运行时间。这样做的好处是一个线程不必等待另一个线程完成。因此,使您的代码为Asynchronous,而不是并行代码。
在其他编程语言中,它还允许OS安排线程在不同的CPU内核上运行,从而使它们并行运行。但是,由于GIL,在Python中这是不可能的,因为C阻止Python一次运行多个Interpreter实例。
您可以启动一个新进程,而不是一个线程,但是这只会带来更多的开销(时间和内存),并且没有任何优势。 Chrome会生成进程而不是浏览器标签的线程,但是出于安全原因,它会生成。由于进程不共享堆内存。
如果您确实需要并行运行任务,则唯一的选择是在call that from Python和中编写线程部分。
答案 1 :(得分:2)
如果我正确理解了您的问题,那么此代码适合您:
import pandas as pd
from multiprocessing import Lock, Process
from time import time
def writefile(df,lock, filename):
lock.acquire()
df.to_csv(filename, index=False, mode='a', header=False)
lock.release()
if __name__ == '__main__':
N = 10000000
df = pd.DataFrame({'a':range(1, N),'b':range(1, N),'c':range(1, N)})
filename= "tmp.csv"
start = time()
df.to_csv(filename, index=False, mode='a', header=False)
print("Standard execution time:", time() - start, 'seconds')
start = time()
lock = Lock()
p = Process(target=writefile, args=(df,lock, filename))
p.start()
p.join()
print("Multiprocessing execution time:", time() - new, 'seconds')
使用多处理方式将比默认方式消耗更多时间。通过在进程之间使用同步,可以使用Processes and Lock来并行执行写入过程。