2017-05-31 93 views
0

我知道在這種情況下使用多處理模塊會更好,但是我正在一臺服務器上工作,需要幾天的時間來添加模塊(我不是管理員),而且我會寧願早日獲得這項工作。線程安全的熊貓變量

我有代碼是不是線程安全的,如果可能的話,我想弄清楚如何使它線程安全。 (下面的代碼)當我不使用線程時,我本地設計的模塊工作。

import sys, threading 
from school.school_func import run_school_report 
from class.class_func import run_class_report 
from common.getdata import get_data   #locally designed module 
import pandas as pd 

class myThread (threading.Thread): 
    def __init__(self, task, year, month, c1, c2, data): 
     threading.Thread.__init__(self) 
     self.task = task 
     self.year = year 
     self.month = month 
     self.class1= c1 
     self.class2= c2 
     self.data = data 
    def run(self): 
     if self.task == "school_report": 
      run_school_report(self.year, self.month, self.class1, self.class2, self.data) 
      print("\nSchool report finished! \n") 
     else: 
      run_class_report(self.year, self.month, self.class1, self.class2) 
      print("\nClass reports finished!\n") 

#main script 
YEAR = 2017 
MONTH = 3 
C1, C2, DATA = get_data('mysql', reload=False, blacklist=True) 
t1 = myThread("school_report", YEAR, MONTH, C1, C2, DATA) 
t2 = myThread("class_reports", YEAR, MONTH, C1, C2, DATA) 
t1.start() 
t2.start() 
t1.join() 
t2.join() 
print("NOTICE:\nAll tasks successfully completed!\n\n") 

變量C1,C2,DATA和分配它們值的類變量是pandas.DataFrame對象。

我的問題是這樣的:

1)是否有可能使此代碼線程安全的?

2)我應該咬緊牙關,使用多處理?

+0

'multiprocessing'是一個核心python模塊,如果你有'threading',你也有'multiprocessing',除非你正在運行一些特殊的Python版本,其中一些核心模塊已經被特別的刪除了。 –

+0

呵呵,我對Python很新,顯然,但看起來你是正確的。也許我拼錯了它。多麼尷尬。 – ajsmart

+0

不用擔心,我會將評論添加爲答案,以便您可以接受並回答問題。 –

回答

1

multiprocessing是一個核心python模塊,如果你有threading你也有multiprocessing,除非你正在運行一些特殊的python版本,其中一些核心模塊已經被特別的刪除了嗎?