线程安全的模块导入

问题

老光 <[email protected]>
reply-to        [email protected]
to      eurasia-users <[email protected]>
date    Tue, Dec 16, 2008 at 10:12
subject [eurasia-users] 这个my_import是否是线程安全的?在E3中使用会出问题么?

好象是木头老大的网页上抄来改的.

来自:[Python学习]__import__与reload要注意的 - limodou的学习记录 - DonewsBlog

   1 import os,sys,time
   2 
   3 def my_import( name ):
   4    """自定义的WINDOWS环境的导入函数,通过把路径增加到sys.path中去来导入任意路径的文件,
   5    但不能改变只能导入一个同名文件的问题
   6    """
   7 
   8    if name[1] <> ':' and name[0]<>'/':  # 如果第二个字符是盘符,或是以'/'开头,则证明是绝对路径,不需要增加相对路径.
   9        name = os.sep.join( [os.getcwd(),name] )
  10    basedir = os.path.dirname(name)
  11    basename = os.path.basename(name)
  12    if basename.split('.')>1:   # 含有扩展名,则删去.
  13        basename = basename.split('.')[0]
  14    if basename=='':    # 如果模块名为空,则导入__init__.py文件
  15        basename = '__init__'
  16 
  17    if sys.modules.has_key(basename):   # 如果已导入了同名模块,要先删去
  18        del sys.modules[basename]
  19 
  20    sys.path.insert( 0, basedir )
  21    result = __import__( basename )
  22    del sys.path[0]
  23 
  24    return result

现在想在Karrigell3.0中和Eurasia中使用这个模块,来根据绝对路径导入py文件. 以前在Karrigell2.X中使用正常的

就是,末三行能不能保证是一个原子操作,不会被打断?否则有可能得到不正确的result.

对策

沈崴 <[email protected]>
reply-to        [email protected]
to      eurasia-users <[email protected]>
date    Tue, Dec 16, 2008 at 13:00
subject [eurasia-users] Re: 这个my_import是否是线程安全

Eurasia 是单线程程序 (你可以认为在 Eurasia 中的 controller 线程都是模拟出来的),

  • 如果中间没有 request 的 read/write 操作以及 stackless 的 schedule/channel 调用,
  • 当前任务不会中断, 所有连续的代码都是连续顺序执行的。所以上面整个程序都是一个原子操作。

如果你需要从绝对路径导入一个 python 模块, 可以使用 eurasia.pyetc 模块。

from eurasia import pyetc
mod = pyetc.load('/PATH/foo.py')

具体详见文档中 "配置文件支持" 一节。

另外导入一个模块不必这么复杂, 这么写就可以了:

   1 import sys, os.path
   2 def my_import(fullpath):
   3    try:
   4        code = open(fullpath).read()
   5    except IOError:
   6        raise ImportError(fullpath)
   7 
   8    filename = os.path.basename(fullpath)
   9    m = type(sys)(filename)
  10    m.__file__ = fullpath
  11    exec compile(code, filename, 'exec') in m.__dict__
  12    return m

这样就不用担心线程问题, 在 Karrigell 中也可以用。


反馈

创建 by -- ZoomQuiet [2008-12-16 05:39:28]

Name Password4deL ;) :( X-( B-)
viagra   fczhllwm smtuhaec etpptxcu
2009-08-09 21:00:40
viagra   ctmselqr hkzkbgel ycmuvghh
2009-08-09 22:26:08
viagra   nsoismrm eyaawvsn kctphfhv
2009-08-09 23:52:12
viagra   zknxixnu daesavms xavhnhbk
2009-08-10 01:15:28
cialis   soixjnoy fslkxpdw qvwgdziu
2009-08-10 02:38:59
cialis france   ffvpnvvj jjlbjftq uskkzgyq
2009-08-14 15:10:44
cialis france   ixrbasfi tgpbkmkg xmurchkn
2009-08-14 16:34:49
viagra   fzmtpkvq jysgqeex rhhvbtbj
2009-08-14 17:59:06
viagra vente   jwiugwdz xmwuksol gbndqnyt
2009-08-14 19:22:04
viagra vente   ftscrlas cfkrsxoa aqdgomxr
2009-08-14 20:49:01
viagra   fpcyjyeu bgrdggja bnrdlhma
2009-08-14 22:16:33
viagra   ncyswpjs nzqcasnf hautqzzi
2009-08-14 23:43:15
vente viagra   qtdcymvv ddokncsx fexutnsy
2009-08-15 01:09:31
cialis   wnguqutx blrimdrn crdnorfc
2009-08-15 02:34:08
acheter viagra   tglfuatf agwfdggz vxrkkkue
2009-08-15 03:58:12
viagra online   bwlzxssi pgapkizh civlmqui
2009-08-18 13:37:52
cialis kaufen billig   psxbclrl wenrxkpo hxfafdwj
2009-08-18 15:16:12
viagra bestellen   cqjqtehc oqlzvxwr wkgcvyvl
2009-08-18 16:58:08
achat cialis pas che   tricomiy elkwpczj ifglirxq
2009-08-19 11:15:16
viagra pfizer   zfmobcua vlkpvqdd okbgqqxu
2009-08-19 16:02:46
comprare viagra su i   fuduooyb vffmszby fgucrkqy
2009-08-21 07:25:36
compra viagra   eqrhgork oqtcxbnw kdbwzpmc
2009-08-21 13:24:38
comprare viagra   zinsepxm tecgytwu jfasrtlz
2009-08-21 19:20:54
comprare viagra gene   dxopgena flczywvo anajqtzg
2009-08-22 01:19:13
cialis generico   lnvulcgj xgrbaeir esaqaipe
2009-08-22 05:45:14
acquistare cialis on   pxbhehrc xhcmcvcd apusuwjt
2009-08-22 11:44:42
viagra   jtvpgujn vghvsgmc kceqzooa
2009-08-23 00:14:58
cialis   kyvxcfqb hijdmfdr ravswuds
2009-08-23 02:02:32
cialis   uqrtjdem tkaemwfe wuoohvap
2009-08-23 03:45:59
cialis   cmexapkx yshmpobj ajlilmcq
2009-08-29 03:41:54
viagra   vmxkncgu illdcqrn csrxhyll
2009-08-29 05:21:44
acquistare viagra ge   nadlgvmi hxliwzwh fiesiozx
2009-08-29 06:58:25
acquisto viagra senz   ievupewq ljagkraf awxwpyby
2009-08-29 08:37:17
achat cialis pas che   llmpfmwr kxndjtpk rtumfggk
2009-08-29 10:18:07
acquisto cialis orig   vnmzuduz poocnxrk edlgjpst
2009-08-29 12:00:27
viagra   xmckimoj wqbrzhgi gtslkaua
2009-08-29 13:36:04
viagra online   bkfzpnud zriyslmg oebekays
2009-08-29 15:12:53
viagra   qqijocwv wyxxrawl ldufvauj
2009-08-29 16:51:48
viagra   xbprvpbd lkyltlgv exawwwmp
2009-08-29 18:31:46

PageCommentData