1. 程式人生 > >【lab】常規操作/註意事項

【lab】常規操作/註意事項

print red 保存 命名 test 臨時 art pid 最有

定時開始

  • bash

echo "python run.py" | at 4:00

atq   # get job ids

at -d <job-id> # cancel job

數據信息(time stamp, entries, method, notes, etc)

任何分布式環境都適用的一個風格:每個文件保存自己的header,而不是用一個中央索引來整合和記錄。

因此最有效的整合零散實驗數據的方法,是在每一個的首行記錄詳細信息,並且標註好各個數據項。

測試

命名一律:test_

方便git提交的時候寫入.gitignore

多進程/線程長時間運行

  1. 將需要運行的參數保存在一個外部文件,而不是臨時寫在代碼裏。(待實踐)

  2. 將參數亂序後分配給不同的進程/線程而不是順序分配,這樣任何時刻得到的數據都有一定代表性

  3. 如果是多進程運行,註意將stderr和stdout重定向到輸出文件。因為程序運行之後各自在自己的進程中輸出,不會打印到當前的shell中。方法如下 https://stackoverflow.com/questions/1501651/log-output-of-multiprocessing-process:

from multiprocessing import Process
import os
import sys

def info(title):
    print title
    print 'module name:', __name__
    print 'parent process:', os.getppid()
    print 'process id:', os.getpid()

def f(name):
    sys.stdout = open(str(os.getpid()) + ".out", "w")
    info('function f')
    print 'hello', name

if __name__ == '__main__':
    p = Process(target=f, args=('bob',))
    p.start()
    q = Process(target=f, args=('fred',))
    q.start()
    p.join()
    q.join()

# output
'''
$ ls
m.py
$ python m.py
$ ls
27493.out  27494.out  m.py
$ cat 27493.out 
function f
module name: __main__
parent process: 27492
process id: 27493
hello bob
$ cat 27494.out 
function f
module name: __main__
parent process: 27492
process id: 27494
hello fred

'''

【lab】常規操作/註意事項