簡體   English   中英

在GNU並行中將多個參數傳遞給python

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM