小编Sha*_*obe的帖子

在创建守护进程时执行双叉的原因是什么?

我正在尝试在python中创建一个守护进程.我发现了以下问题,其中有一些我目前正在关注的好资源,但我很好奇为什么需要双叉.我抓住谷歌,发现有足够的资源声明一个是必要的,但不是为什么.

有人提到它是为了防止守护进程获得控制终端.没有第二个叉子怎么做呢?有什么影响?

python unix daemon

156
推荐指数
5
解决办法
5万
查看次数

为什么sys.exit()在Python中的线程内调用时不会退出?

这可能是一个愚蠢的问题,但我正在测试我对Python的一些假设,我很困惑为什么以下代码片段在线程中调用时不会退出,但在主线程中调用时会退出.

import sys, time
from threading import Thread

def testexit():
    time.sleep(5)
    sys.exit()
    print "post thread exit"

t = Thread(target = testexit)
t.start()
t.join()
print "pre main exit, post thread exit"
sys.exit()
print "post main exit"
Run Code Online (Sandbox Code Playgroud)

sys.exit()的文档声明调用应该从Python退出.我可以从这个程序的输出中看到"post thread exit"永远不会被打印出来,但是主线程在线程调用exit之后仍然继续运行.

是否为每个线程创建了一个单独的解释器实例,而对exit()的调用只是退出该单独的实例?如果是这样,线程实现如何管理对共享资源的访问?如果我确实想要从线程中退出程序(不是我真的想要,但我只是理解)该怎么办?

python python-2.6

80
推荐指数
5
解决办法
6万
查看次数

如何阻止Python parse_qs将单个值解析为列表?

在python 2.6中,以下代码:

import urlparse
qsdata = "test=test&test2=test2&test2=test3"
qs = urlparse.parse_qs(qsdata)
print qs
Run Code Online (Sandbox Code Playgroud)

给出以下输出:

{'test': ['test'], 'test2': ['test2', 'test3']}
Run Code Online (Sandbox Code Playgroud)

这意味着即使测试只有一个值,它仍然被解析为一个列表.有没有办法确保如果只有一个值,它不会被解析成一个列表,所以结果看起来像这样?

{'test': 'test', 'test2': ['test2', 'test3']}
Run Code Online (Sandbox Code Playgroud)

python python-2.6

41
推荐指数
2
解决办法
2万
查看次数

PHP相当于Python的__name__ =="__ main__"?

根据标题,是否有PHP相当于__name__ == "__main__"

有什么东西适用于通过命令行和Web请求执行的脚本,还是需要自定义函数?

对于那些不熟悉Python的人来说,__name__ == "__main__"允许你定义一个模块文件,并且如果它是入口点,还有一些允许你运行它的东西.PHP中的等效结构类似于:

// SomeClass.php
<?php
class SomeClass
{
    function doStuff() {
        echo "wahey!\n";
    }
}

// python, I know.
if (__name__ == "__main__") {
    $sc = new SomeClass;
    $sc->doStuff();
}
?>

// OtherClass.php
<?php
require_once("SomeClass.php");
class OtherClass
{
    public $yep;
}
?>

// command line:
php SomeClass.php     // outputs "wahey!"
php OtherClass.php    // outputs nothing
Run Code Online (Sandbox Code Playgroud)

注意:zerkms的答案是最好的,但是不太正确 - 它应该是:

if (!debug_backtrace()) {
    // do useful stuff
}
Run Code Online (Sandbox Code Playgroud)

这比!count(debug_backtrace())快得多,它本身的速度大约是我的涉及realpath()的解决方案的两倍.

php program-entry-point

34
推荐指数
2
解决办法
4745
查看次数

使用file_get_contents上传文件

我意识到我可以很容易地用CURL做到这一点,但我想知道是否可以使用file_get_contents()http流上下文将文件上传到远程Web服务器,如果是的话,怎么样?

php file-upload file-get-contents

33
推荐指数
1
解决办法
3万
查看次数

递归地将python对象图转换为字典

我正在尝试将数据从简单的对象图转换为字典.我不需要类型信息或方法,我不需要能够再次将它转换回对象.

我发现这个问题是关于从对象的字段创建字典,但它不会递归地执行.

对于python来说相对较新,我担心我的解决方案可能是丑陋的,或者说是unpythonic,或者是以某种模糊的方式打破,或者只是简单的旧NIH.

我的第一次尝试似乎工作,直到我尝试使用列表和字典,并且检查传递的对象是否有内部字典似乎更容易,如果没有,只是将其视为一个值(而不是做所有的实例检查) ).我以前的尝试也没有递归到对象列表中:

def todict(obj):
    if hasattr(obj, "__iter__"):
        return [todict(v) for v in obj]
    elif hasattr(obj, "__dict__"):
        return dict([(key, todict(value)) 
            for key, value in obj.__dict__.iteritems() 
            if not callable(value) and not key.startswith('_')])
    else:
        return obj
Run Code Online (Sandbox Code Playgroud)

这似乎工作得更好,不需要例外,但我仍然不确定这里是否有案例,我不知道它在哪里落下.

任何建议将不胜感激.

python python-2.6

32
推荐指数
3
解决办法
1万
查看次数

PHPUnit中的SimpleTest"部分模拟"的等价物?

我正在尝试将一堆测试从SimpleTest迁移到PHPUnit,我想知道是否有一个等效的SimpleTest的部分模拟.

更新:我似乎无法在文档中找到任何暗示此功能可用的内容,但我想到我可以使用子类.这是一个好主意还是坏主意?

class StuffDoer {
    protected function doesLongRunningThing() {
        sleep(10);
        return "stuff";
    }
    public function doStuff() {
        return $this->doesLongRunningThing();
    }
}
class StuffDoerTest {
    protected function doesLongRunningThing() {
        return "test stuff";
    }
}
class StuffDoerTestCase extends PHPUnit_Framework_TestCase {
    public function testStuffDoer() {
        $sd = new StuffDoerTest();
        $result = $sd->doStuff();
        $this->assertEquals($result, "test stuff");
    }
}
Run Code Online (Sandbox Code Playgroud)

php phpunit simpletest

27
推荐指数
3
解决办法
2万
查看次数

Python相当于PHP的memory_get_usage()?

我已经发现了以下问题,但我想知道是否有一种更快更脏的方法来获取python解释器当前用于我的脚本而不依赖于外部库的内存量的估计.

我来自PHP并且为此目的使用了memory_get_usage()memory_get_peak_usage(),我希望能找到一个等价物.

python

24
推荐指数
3
解决办法
7977
查看次数

具有大结果集的PDO/MySQL内存消耗

我有一个奇怪的时间处理从大约30,000行的表中选择.

似乎我的脚本使用了大量的内存,因为这是一个简单的,仅向前遍历查询结果的内容.

请注意,这个例子是一个有点人为的,绝对的最小例子,它与真实代码几乎没有相似之处,它不能用简单的数据库聚合代替.它旨在说明每次迭代时不需要保留每一行的要点.

<?php
$pdo = new PDO('mysql:host=127.0.0.1', 'foo', 'bar', array(
    PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,
));
$stmt = $pdo->prepare('SELECT * FROM round');
$stmt->execute();

function do_stuff($row) {}

$c = 0;
while ($row = $stmt->fetch()) {
    // do something with the object that doesn't involve keeping 
    // it around and can't be done in SQL
    do_stuff($row);
    $row = null;
    ++$c;
}

var_dump($c);
var_dump(memory_get_usage());
var_dump(memory_get_peak_usage());
Run Code Online (Sandbox Code Playgroud)

这输出:

int(39508)
int(43005064)
int(43018120)
Run Code Online (Sandbox Code Playgroud)

我不明白为什么在任何时候几乎不需要保存任何数据时使用40兆内存.我已经解决了我可以通过用"SELECT home,away"替换"SELECT*"来减少大约6倍的内存,但是我认为即使这种用法非常高,而且表只会变得更大.

是否有我缺少的设置,或者我应该注意PDO的某些限制?我很高兴摆脱PDO而不支持mysqli,如果它不能支持这个,那么如果这是我唯一的选择,我将如何使用mysqli执行此操作呢?

php mysql pdo

22
推荐指数
1
解决办法
2万
查看次数

将PHP关联数组传递给XML或从XML传递

有没有一种简单的方法可以将PHP关联数组封送到XML和从XML封送?例如,我有以下数组:

$items = array("1", "2",
    array(
        "item3.1" => "3.1",
        "item3.2" => "3.2"
        "isawesome" => true
    )
);
Run Code Online (Sandbox Code Playgroud)

我将如何在尽可能少的行中将其转换为类似于以下XML的内容,然后再返回?

<items>
    <item>1</item>
    <item>2</item>
    <item>
        <item3_1>3.1</item3_1>
        <item3_2>3.2</item3_2>
        <isawesome>true</isawesome>
    </item>
</items>
Run Code Online (Sandbox Code Playgroud)

我真的不在乎是否需要更改数组结构或者出现的XML与上面的示例不同.我一直在尝试使用PHP的XMLReaderXMLWriter,但是文档非常糟糕,我生成的代码看起来与我认为的样子完全不同:

$xml = SomeXMLWriter::writeArrayToXml($items);
$array = SomeXMLWriter::writeXmlToArray($xml);
Run Code Online (Sandbox Code Playgroud)

在没有编写我自己的自定义类的情况下,获取PHP数组的基本原始XML转储是否真的必须更难?

我尽量避免梨.除了我曾经遇到的配置问题之外,我从来没有坚持使用过我曾经使用过的任何软件包.

php xml xml-serialization

17
推荐指数
2
解决办法
3万
查看次数