運行《tensorflow實戰(zhàn)google深度學(xué)習(xí)框架》這本書中關(guān)于多線程操作的例子時,
import tensorflow as tf
import numpy as np
import threading
import time
def MyLoop(coord, worker_id):
while not coord.should_stop():
if np.random.rand()<0.1:
print "Stoping from id: %d\n" % worker_id,
coord.request_stop()
else:
print "Working on id: %d\n" % worker_id,
time.sleep(1)
coord = tf.train.Coordinator()
threads = [threading.Thread(target=MyLoop, args=(coord, i, )) for i in xrange(5)]
for t in threads:t.start()
coord.join(threads)
出現(xiàn)了如下錯誤:
Traceback (most recent call last):
File "threading.py", line 1, inimport tensorflow as tf?
File "/home/stephen/.local/lib/python2.7/site-packages/tensorflow/__init__.py", line 24, infrom tensorflow.python import *?
File "/home/stephen/.local/lib/python2.7/site-packages/tensorflow/python/__init__.py", line 49, inimport numpy as np?
File "/usr/local/lib/python2.7/dist-packages/numpy/__init__.py", line 142, infrom . import add_newdocs?
File "/usr/local/lib/python2.7/dist-packages/numpy/add_newdocs.py", line 13, infrom numpy.lib import add_newdoc
File "/usr/local/lib/python2.7/dist-packages/numpy/lib/__init__.py", line 8, infrom .type_check import *?
File "/usr/local/lib/python2.7/dist-packages/numpy/lib/type_check.py", line 11, inimport numpy.core.numeric as _nx
File "/usr/local/lib/python2.7/dist-packages/numpy/core/__init__.py", line 72, infrom numpy.testing.nosetester import _numpy_tester?
File "/usr/local/lib/python2.7/dist-packages/numpy/testing/__init__.py", line 12, infrom . import decorators as dec?
File "/usr/local/lib/python2.7/dist-packages/numpy/testing/decorators.py", line 20, infrom .utils import SkipTest, assert_warns
File "/usr/local/lib/python2.7/dist-packages/numpy/testing/utils.py", line 27, infrom threading import Lock?
File "/home/stephen/python/threading.py", line 16, incoord = tf.train.Coordinator()
AttributeError: 'module' object has no attribute 'train'
以為是書中代碼寫錯了,仔細檢查了一下,代碼沒什么問題斯撮,于是我就把代碼精簡泽铛,刪的就剩下兩行了:
import tensorflow as tf
coord = tf.train.Coordinator()
還是上面的錯誤
記得以前也用過tf.train,可是也沒見過這中錯誤啊贱勃。于是乎昂勒,我找來以前的代碼冬殃,把代碼刪的也是就剩兩行,運行叁怪,沒錯誤。于是我就很納悶了深滚,仔細對比了這兩個文件奕谭,發(fā)現(xiàn)惟一的不同就是文件名,我想會不會是文件名導(dǎo)致出錯呢痴荐,原來的文件名是threading.py血柳,我把它改為test.py,運行生兆,成功难捌。又把文件名改為thread.py,運行鸦难,同樣的錯誤根吁。看來文件名真的會影響程序的運行昂媳巍击敌!
為什么會出現(xiàn)這樣的錯誤呢?我猜想是不是跟計算機系統(tǒng)中的文件重名了呢拴事?搜索了一下沃斤,果不其然,/usr/lib/python3.5/concurrent/futures 中有thread.py這個文件刃宵,/usr/lib/python2.7 中有threading.py這個文件衡瓶。為了驗證我的猜想,我把多線程操作的這個文件名改成跟/usr/lib/python2.7目錄下任意一個文件名相同牲证,于是又出現(xiàn)了上面的錯誤哮针,同時也驗證了我的猜想。以上。