在 GNU parallel 中将多个参数传递给 python
Passing multiple parameters to python in GNU parallel
我有完美运行的代码,但我想使用 GNU 并行并使其 运行 更快。
代码读入一个文件,该文件的每一行都有一个 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 并行中工作:
parallel --pipepart -a json.in --block 1M python json_parser.py
但是如何传递另外两个参数DB_order和交易呢?
谢谢
--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
。这将使 GNU Parallel compute --block
as filesize/(10*jobslots) 导致每个作业槽有 10 个作业。如果一个块占用的时间是其余块的两倍,那么运行时间只会延长 10%。
我有完美运行的代码,但我想使用 GNU 并行并使其 运行 更快。 代码读入一个文件,该文件的每一行都有一个 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 并行中工作:
parallel --pipepart -a json.in --block 1M python json_parser.py
但是如何传递另外两个参数DB_order和交易呢?
谢谢
--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
。这将使 GNU Parallel compute --block
as filesize/(10*jobslots) 导致每个作业槽有 10 个作业。如果一个块占用的时间是其余块的两倍,那么运行时间只会延长 10%。