python下os.system使用shell脚本处理目录下的一些文件,shell分了几个步骤,用了多线程,当上个线程还未未处理完数据,下一个线程已经启动,同样处理了此文件,造成了一些冲突,
贴上这部分代码:
def save(fn, ts):
try:
print 'save', fn, '...', ts
s = os.path.basename(fn)
if s[-3:] == '.gz':
is_gz = True
s = s[:-3]
else:
is_gz = False
if s[:3] == 'dx.':
if is_gz:
dt = s.split('.')[4][:8]
p = DST_DIANXIN + dt + '/'
os.system('mkdir -p ' + p)
dx_fn = p + s + '.txt'
dx_tmp = p + s + '.new'
print 'zcat', fn, '-->', dx_fn
os.system('zcat %s > %s; mv -f %s %s; rm -rf %s' % (fn, dx_tmp, dx_tmp, dx_fn, fn))
# os.remove(fn)
while True:
if os.path.exists(SRC + 'stopping'):
break
rpts = glob.glob(SRC + '*.gz')
rpts.sort()
for fn in rpts:
fn2 = fn
if os.path.exists(fn2):
ts = len(threading.enumerate())
while ts > MAXTHREADS:
ts = len(threading.enumerate())
time.sleep(0.2)
threading.Timer(0.2, save, args=(fn2,ts)).start()
time.sleep(1)