小编psy*_*tic的帖子

新线程阻塞主线程

from threading import Thread
class MyClass:
    #...
    def method2(self):
        while True:
            try:
                hashes = self.target.bssid.replace(':','') + '.pixie'
                text = open(hashes).read().splitlines()
            except IOError:
                time.sleep(5)
                continue
        # function goes on ...

    def method1(self):
        new_thread = Thread(target=self.method2())
        new_thread.setDaemon(True)
        new_thread.start()  # Main thread will stop there, wait until method 2 

        print "Its continues!" # wont show =(
        # function goes on ...
Run Code Online (Sandbox Code Playgroud)

有可能这样做吗?在new_thread.start()主线程等待它完成之后,为什么会发生这种情况?我没有在任何地方提供new_thread.join().

守护进程没有解决我的问题,因为我的问题是主线程在新线程启动后立即停止,而不是因为主线程执行结束.

python multithreading

6
推荐指数
1
解决办法
5412
查看次数

Jooq record.into(Pojo.class) 具有相同字段名称问题

我有代码从 2 个表中检索 2 个对象(由 JooQ 生成的 POJO)的一条记录。

 Record record = dsl.select()
            .from(ISSUE)
            .leftJoin(CLIENT).on(CLIENT.ID.eq(ISSUE.CLIENT_ID))
            .where(ISSUE.ID.eq(id))
            .fetchOne();
    JIssue jIssue = record.into(JIssue.class);
    JClientRecord jClient = record.into(JClientRecord.class);
Run Code Online (Sandbox Code Playgroud)

表 ISSUE 和表 CLIENT 都有 PK 字段“ID”。

问题是当映射到(POJO.class)时,具有相同名称的表字段未正确映射到 POJO。在上面的示例中,jIssue 采用 jClient 的 id

当使用 TableRecords 而不是 POJO 的所有映射正确完成时,但您不能在生成的 DAO 中使用 TableRecord,它需要生成的 POJO。

我该如何解决这个问题,以便 jooq 可以正确映射到生成的 pojo 字段?

java sql mapping pojo jooq

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

-XX:-UseContainerSupport 和 -XX:MaxRAMPercentage 是否会自动计算其他 JVM 资源大小?

从 Java 8 更新 191 或更高版本,或 Java 10、11、12、13 等开始。我们有一个XX:+UseContainerSupport默认激活的选项,因此 JVM 可以读取容器内 RAM 和 CPU 的限制。通过设置,-XX:MaxRAMPercentage=90.0我可以告诉 JVM 我想要给 HEAP 多少可用 RAM 的百分比,但是其他 JVM 资源呢?像 GC、CodeCache、ClassLoading、Metaspace、DirectBuffers 等等?

JVM 是否也会调整其大小(分配堆后的剩余空间)以不超过可用 RAM?或者我仍然需要在每种情况下自己计算它,如下所示:

-XX:MetaspaceSize=64m -XX:ReservedCodeCacheSize=32m -XX:CompressedClassSpaceSize=16m -Xss256k 
Run Code Online (Sandbox Code Playgroud)

例如,如果创建一个具有 1G RAM 的容器并在其中运行 JVM -XX:MaxRAMPercentage=90.0,那么 HEAP 将占用 900m,而其他 JVM 内容将只有 100m,这 100m 是否会在所有需要的资源之间进行智能分配,例如设置XX:MaxMetaspaceSize(哪个默认情况下是无限的)?

performance jvm docker

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

Delphi tclientdataset .cds datetime binary timeformat unpack

我正在尝试解析.cds delphi数据库文件.简单的int值和字符串很容易解析.但唯一一个我无法理解的是DateTime格式.我找到了影响DateTime Value的6个字节

我正在使用python和以下代码:

data = '\x00\x00' + '\xBC\xCE\x6F\xEC\xE7\xCC'
data_long = struct.unpack('Q', data)[0]
Run Code Online (Sandbox Code Playgroud)

但是struct.unpack没有6个字节的类型值,所以我添加了\ x00\x00来生成8个字节的长值('Q'选项)

这是一个小样本.cds文件,有一行https://yadi.sk/d/PkZKy50YgCmqE

DateTimeIssl value ="16.04.2015 9:25:47"

我找到了6个十六进制值,但无法正确解压缩.任何人都可以告诉我如何阅读它,或者可能给我一些关于.cds文件结构的文档的链接?

更新: 好的!感谢Deltics指导我如何阅读TDateTime.我在互联网上找到了一些测试值,我编写了解码函数,将其转换为Python日期时间对象.

data = '\x2E\xD8\x82\x2D\xCE\x47\xE3\x40'

data_double = struct.unpack('d', data)[0]
double_split = str(data_double).split('.')

SECONDS_IN_DAY = 60*60*24
time_from_starting_date = timedelta(days=int(double_split[0]), seconds=int(SECONDS_IN_DAY * (float(double_split[1]) * pow(0.1, len(double_split[1])))))

starting_date = datetime(1899, 12, 30)
result_date = starting_date + time_from_starting_date

print time_from_starting_date
print result_date
Run Code Online (Sandbox Code Playgroud)

对于2E D8 82 2D CE 47 E3 40,它将是08.02.2008 10:38:00.工作良好.

但我仍然找不到上面链接的文件中的字段DateTimeIssl的有效8字节.也许有不同的日期时间格式?

delphi datetime parsing tclientdataset

1
推荐指数
1
解决办法
557
查看次数