Я написал код для записи в файле csv в python. Когда моя программа заканчивается, я вижу, что несколько строк объединены, а не в отдельных строках. Каждая строка должна содержать только 3 столбца. Но вместо этого он показывает, как показано нижеpython fcntl не получает блокировку
EG
myname myage myvalue
myname myage myvaluemyname
myname myage myvalue
myage
Что я понял, прочитав несколько других вопросов, в том, что мне нужно, чтобы заблокировать мой файл, если я хочу, чтобы избежать таких сценариев. Поэтому я добавил модуль fcntl. Но кажется, что мой файл еще не заперт, как он производит аналогичный вывод
Моего код
def getdata(x):
try:
# get data from API
c.writefile(x,x1,x2)
except Exception,err:
print err
class credits:
def __init__(self):
self.d = dict()
self.details = dict()
self.filename = "abc.csv"
self.fileopen = open(self.filename,"w")
def acquire(self):
fcntl.flock (self.fileopen, fcntl.LOCK_EX)
def release(self):
fcntl.flock(self.fileopen, fcntl.LOCK_UN)
def __del__(self):
self.fileopen.close()
def writefile(self,x,x1,x2,x3):
try:
self.acquire()
self.fileopen.write(str(x)+","+str(x1)+","+str(x2)+"\n")
except Exception, e:
raise e
finally:
self.release()
if __name__ == '__main__':
conn = psycopg2.connect()
curr = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
curr.execute("select * from emp")
rows = curr.fetchall()
listdata = []
for each in rows:
listdata.append(each[0])
c = credits()
p = Pool(processes = 5)
results = p.map(getdata,listdata)
conn.close()
я должен был объявить GetData как функция верхнего уровня в противном случае он дал мне «Cant функции рассола»
Вы отключили файловый буфер? – denfromufa
@denfromufa - Извините, но не уверен, понял ли я вас. Как я могу это сделать? – Neil
http://stackoverflow.com/a/3168436/2230844 – denfromufa