所以,這裏的情況是:
我使用GAE Pipeline lib的流量,我班FanoutPipeline從管道類派生從庫:isinstance()返回False由於未知原因,
from pipeline import pipeline
class FanoutPipeline(pipeline.Pipeline):
當管道進程運行,它檢查,以驗證該對象實際上是從管道派生的類的實例,但是它返回False:
yielded = pipeline_iter.send(next_value)
# here I check that yielded is an object of `FanoutPipeline`
# class, plz see logs output below
if isinstance(yielded, Pipeline): # returns false here
我加了一噸的日誌來獲得分類及其模塊:
import inspect
logging.debug('Yielded: {}'.format(yielded))
for cls in inspect.getmro(yielded.__class__):
logging.debug('Yielded base: {}'.format(inspect.getmodule(cls)))
logging.debug('Yielded base: {}'.format(cls))
logging.debug('PipelineMeta classes: {}'.format(_PipelineMeta._all_classes))
logging.debug('Pipeline: {}'.format(Pipeline))
logging.debug('Pipeline module: {}'.format(inspect.getmodule(Pipeline)))
for cls in inspect.getmro(Pipeline):
logging.debug(inspect.getmodule(cls))
if isinstance(yielded, Pipeline):
,並得到了輸出:
D 21:55:48.079 Yielded: project.handlers.pipeline_gcm.FanoutPipeline(*(None, {u'campaign_id': u'xxx', u'campaign_name': u'xmas notification', u'execution': {u'action': u'market', u'conditions': {u'delayBetweenNotificationsHours': 0, u'in... (515 bytes), **{}) D 21:55:48.079 Yielded base: <module 'project.handlers.pipeline_gcm' from '/base/data/home/apps/s~project-dev3/9.389913797024223872/projects/handlers/pipeline_gcm.pyc'> D 21:55:48.079 Yielded base: <class 'project.handlers.pipeline_gcm.FanoutPipeline'> D 21:55:48.080 Yielded base: <module 'pipeline.pipeline' from '/base/data/home/apps/s~project-dev3/9.389913797024223872/libraries/pipeline/pipeline.pyc'> D 21:55:48.080 Yielded base: <class 'pipeline.pipeline.Pipeline'> D 21:55:48.080 Yielded base: <module '__builtin__' (built-in)> D 21:55:48.080 Yielded base: <type 'object'> D 21:55:48.081 PipelineMeta classes: [<class 'libraries.pipeline.pipeline.Pipeline'>] D 21:55:48.081 Pipeline: <class 'libraries.pipeline.pipeline.Pipeline'> D 21:55:48.081 Pipeline module: <module 'libraries.pipeline.pipeline' from '/base/data/home/apps/s~project-dev3/9.389913797024223872/libraries/pipeline/pipeline.pyc'> D 21:55:48.082 <module 'libraries.pipeline.pipeline' from '/base/data/home/apps/s~project-dev3/9.389913797024223872/libraries/pipeline/pipeline.pyc'> D 21:55:48.082 <module '__builtin__' (built-in)>
正如你看到的,產生了具有明確pipeline.pipeline.Pipeline
在基礎班,模塊路徑匹配。
這裏有一些想法爲什麼它會發生: 1.對象在進程之間以某種方式傳遞,並且檢查失敗,因爲一個基類在一個進程中加載,另一個在另一個進程中加載。 2.存在相對路徑的差異,即pipeline.pipeline
模塊正在創建過程中,其中創建了對象
和libraries.pipeline.pipeline,在使用它的過程中和isinstance
檢查正在完成。
你能幫我解決這個問題嗎?我應該首先嚐試什麼?什麼可能是這個失敗的原因?
'type(yield)'返回什麼? –
@KaustavDatta產生類型: –
我的猜測...我認爲你導入了兩個版本的類,一個是'libraries.pipeline.pipeline.Pipeline',另一個是' pipeline.pipeline.Pipeline'。這意味着你在'sys中有'/ base/data/home/apps/s〜project-dev3/9.389913797024223872 /'和'/ base/data/home/apps/s〜project-dev3/9.389913797024223872/libraries'。 path'。你不應該在你的Python路徑中有'/ base/data/home/apps/s〜project-dev3/9.389913797024223872 /',也不應該導入'libraries.anything'。 – tdelaney