在处理 500k XML 验证和relaxng 链接的脚本中,我尝试计算 myFunc() 中的案例。如果我使用全局变量,我必须在 myFunc() 中将它们标记为全局变量,然后才能更改它们。当我在 myFunc() 中打印出它们的值时,我可以看到值更改为 1、2、3、4 等等。但是当我打印出 run() 中的值时,我得到的不是更改的值。在 run() 中所有三个变量都为 0,就像在 myFunc() 中更改它们之前一样。
我知道有更好的方法来完成这项工作。但我的问题是为什么在 run() 中更改的全局变量不再更改,是否有可能实现这一点?
它与多处理有关吗?
valid = 0
excpt = 0
relaxerr = 0
def myFunc(link):
try:
global valid
valid += 1
print valid
doc = etree.parse(urllib2.urlopen(link))
except Exception, e:
global except
excpt += 1
print excpt
with open('log.txt', 'a') as f:
f.write('%s\n' % e)
return
if not RELAXNG.validate(doc):
global relaxerr
relaxerr += 1
print relaxerr
with open('log.txt', 'a') as f:
f.write('%s\n' % RELAXNG.error_log)
return
....
do stuff for valid ....
def run():
...
pool.map_async(myFunc, links, 64)
pool.wait()
print valid
print excpt
print relaxerr