[英]Passing multiple parameters to python in GNU parallel
我的代碼可以完美運行,但是我想使用GNU並行adn使其運行更快。 該代碼讀取每行都有JSON的文件,對其進行解析並再創建一行。
輸入(json.in)
{"NBR": "8001474830", "UNIQUE_ID": "PP007.8001474830.20150807"}
產量
{"create": {"_type": "transaction", "_id":"PP007.8001474830.20150807.8001474830", "_index": "DB_order"}}
{"NBR": "8001474830:, "UNIQUE_ID": "PP007.8001474830.20150807"}
python代碼如下:
import sys
import json
import fileinput
index = ""+sys.argv[2]+""
type = ""+sys.argv[3]+""
create_bulk={ "create": { "_index": index, "_type": type, "_id": "0"}}
for line in fileinput.input(sys.argv[1]):
json_in=json.loads(line)
create_bulk["create"]["_id"]=json_in["UNIQUE_ID"]+"."+json_in["NBR"]
print json.dumps(create_bulk)
print json.dumps(json_in)
我執行代碼如下
python json_parser.py json.in DB_order transaction
我的問題是如何將其轉換為GNU並行語法。
我可以通過傳遞如下文件名來使它在GNU並行環境中工作:
並行--pipepart -a json.in --block 1M python json_parser.py
但是,如何傳遞其他兩個參數DB_order和transaction?
謝謝
--fifo
非常有效:
parallel --pipepart --fifo -a json.in --block 1M python json_parser.py {} my_DB_order my_transaction
我注意到您沒有使用-k
,因此我認為順序並不重要,在這種情況下,這通常會更快:
parallel --round-robin --pipepart --fifo -a json.in python json_parser.py {} DB_ordera transactiona
它將--block
計算為filesize / jobslots,並為每個作業分配一個塊。 好處:更少的創業公司。 缺點:如果一個區塊的速度慢得多,則可能會使所有內容變慢。 假設,如果一個塊花費的時間是其他塊的兩倍,那么總運行時間將是原來的兩倍。
--block 1M
和--roundrobin
之間的--block 1M
是不使用--block
。 這將使GNU Parallel計算--block
為filesize /(10 * jobslots),從而導致每個作業位10個作業。 如果一個塊占用了其余塊的兩倍,那么運行時間將僅增加10%。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.