2013-07-13 2 views
0

Я новичок в программировании и изучении python 3.x около 3 или 4 месяцев.В python, о хранении данных в файлах

В настоящее время я пытаюсь создать программу для поиска решений некоторых «магических квадратов».

Известно, что магический квадрат 6x6 имеет более 200 000 000 решений.

Таким образом, эти цифры слишком велики, чтобы хранить в нормальной памяти компьютера, что я хочу

для хранения вычисленных и найденных решений в файлы время от времени.

Предположим, что я хочу сохранить решения в файле, когда они станут 1,000,000.

Как это следующий короче:

if len(resultList) == 1000000: 
    file = open('{0}x{0} PMS Solutions {1:03}.txt'.format(ansr, fileNum), 'w') 
    file.write(resultList) 
    file.close() 
    resultList = [] 

Затем, в то время как файл делается, процесс поиска новых решений не работает.

Мой вопрос:

Есть ли способ сделать оба процесса-счетных и хранящих-работу одновременно?

+1

Взгляните на модуль потоковой передачи: http://docs.python.org/3/library/threading.html – joon

ответ

1

Если вы используете python3.3 простой и элегантный способ достижения того, что вы хотите, с помощью ThreadPoolExecutor:

def save_to_file(data): 
    fname = '{0}x{0} PMS Solutions {1:03}.txt'.format(ansr, fileNum) 
    with open(fname, 'w') as fout: 
     fout.write(data) # save the list to file in some way 

использовать его как:

executor = ThreadPoolExecutor(max_workers=2) 

# ... 

if len(resultList) >= 1000000: 
    future = executor.submit(save_to_file, resultList) 
    resultList = [] 

То же самое можно сделать с помощью модуль threading в версиях python до 3,3 Нечто вроде:

thread = None 

if len(resultList) >= 1000000: 
    if thread is not None: 
     thread.join() # finish saving the other solutions first 
    thread = threading.Thread(target=save_to_file, args=(resultList,)) 
    thread.start() 
    resultList = [] 
Смежные вопросы