Chinaunix首页 | 论坛 | 博客
  • 博客访问: 250613
  • 博文数量: 91
  • 博客积分: 4185
  • 博客等级: 上校
  • 技术积分: 855
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-29 16:18
文章分类

全部博文(91)

文章存档

2014年(3)

2013年(1)

2012年(8)

2011年(2)

2010年(5)

2009年(68)

2008年(4)

我的朋友

分类: LINUX

2009-07-29 09:00:44

1、对付win32与linux目录分隔符不同的办法:

if os.platform == win32 :
    DIAGONAL = ""
else :
    DIAGONAL = "/"


2、不要在子函数中直接退出整个程序。所有的退出整个程序的命令最好都在主函数中。

3、将错误信息输出到标准错误输出设备。以便其它程序在处理错信息时能处理最少的信息量。

4、对于不用的已打开文件要及时关闭。以便其它程序修改该文件。

5、如果修改一个文件只是一个程序所需要的,就在这个程序完成时及时的恢复原来的文件内容。
   不要擅自改动别的程序可能要用到的文件,因为他很可能不知道你已经把他的文件改动了。

6、对于缩写尽量都做出解释

7、关于调用外部程序时的输出流的处理
    在调用外部程序时,我们可能会用一个线程去监听这个外部程序的输出信息(输出流),但是这种情况下有可能出现外部已经运行,但是却得不到外部程序的输出。
     

具体情况如上图,这个时候,如果B程序自己在调用C之前向输出流输出一些信息时,监听线程可能就得不到B的输出。
    原因分析:我们说程序或线程都是在系统中并行运行的,但是这是从宏观上说的,从微观上来说,如果我们只有一个CPU,那么所有的指令都是串行的,也就是说在B程序调用C程序这个指令时,可能A程序的监听线程还只是在监听几十个指令之前,监听线程得到的输出是几十个指令之前的输出,也就是说是过去的,现在B程序调用C程序了,并且做了输出流的重定向,开始运行C程序了,系统的调度器激活监听线程,这个时候监听线程发现标准输出流没有内容(因为被重定向了),所以它认定B没有向标准输出流输出信息,这时,它就“漏”了一部分B输出的信息,只有当B恢复标准输出流时,它才能得到B在调用C之前的输出信息。
    解决办法:B在调用C之前,清空一次标准输出流,伪码如下:
                        stdout.flush()
    这就强迫系统对缓冲区清空,B的输出信息就能及时输出到标准缓冲区。
所以在调用外部程序时,如果要对标准输出流重定向,一定要将标准输出流做一次清空处理。

8、在一个项目的设计之后,编码之前,我觉得应该做的事,这里是指简单的项目
    a、要有一个主程序文件 main,然后是util global README
    b、灵活的日志系统
    c、对于输出信息的控制:主要是调试信息的输出开关
    d、异常体系
    e、注释方案
9、如果程序中经常涉及目录的切换则不太适合用多线程,而应该用多进程,因为对于多线程而言,当一个线程切换了工作目录时,其它线程得到的当前工作目录就是这个切换后的工作目录。
10、多进程不太利于全局变量的共享,当一个进程被创建时,父进程的所有的全局变量就不能被子进程所使用
11、全局变量不是害虫,在一个工程里是必然存在的,如果把全局变量写成了局部变量,那么在代码的其它部分很有可能会造成代码的冗余与混乱。
阅读(448) | 评论(0) | 转发(0) |
0

上一篇:算法参考书

下一篇:MPI点滴

给主人留下些什么吧!~~