小编ila*_*lex的帖子

生成具有较低拉丁字母的大随机字符串的最快方法

我正试图从蒂姆斯在线评判中解决这个问题.要解决此问题,您需要生成一个包含1 000 000个小写拉丁字母的序列,并在1秒内将其写入标准输入.

使用C++或Java很容易解决这个问题.我这里有python解决方案:

import os
from random import randint

s = ''.join(chr(97 + randint(0, 25)) for i in range(1000000))
os.write(1, bytes(s, 'utf8'))
Run Code Online (Sandbox Code Playgroud)

需要1.7秒:

$ time python3.3 1219.py > /dev/null

real    0m1.756s
user    0m1.744s
sys     0m0.008s
Run Code Online (Sandbox Code Playgroud)

我得到了"超出时间限制"的结果.所以问题是"如何更快地做到这一点?"

UPD1:使用randint(97, 122)减少16ms的时间.现在是1.740s

UPD2: @Martijn Pieters的解决方案需要0.979秒,但它也没有通过测试.

UPD3 Martijn Pieters提出了一个非常好的解决方案,但它仍然很慢:

from sys import stdin
from random import choice
from string import ascii_lowercase

s = ''.join([choice(ascii_lowercase) for _ in range(1000000)])
stdout.write(s) 
Run Code Online (Sandbox Code Playgroud)

需要0.924秒

from sys import stdout
from random import …
Run Code Online (Sandbox Code Playgroud)

python random performance stdin python-3.x

12
推荐指数
2
解决办法
7529
查看次数

Python多处理崩溃了docker容器

当我在控制台中运行它时,有一个简单的python多处理代码就像魅力一样:

# mp.py
import multiprocessing as mp


def do_smth():
    print('something')


if __name__ == '__main__':
    ctx = mp.get_context("spawn")
    p = ctx.Process(target=do_smth, args=tuple())
    p.start()
    p.join()
Run Code Online (Sandbox Code Playgroud)

结果:

> $ python3 mp.py
something
Run Code Online (Sandbox Code Playgroud)

然后我用Dockerfile创建了一个简单的Docker容器:

FROM python:3.6

ADD . /app
WORKDIR /app
Run Code Online (Sandbox Code Playgroud)

和docker-compose.yml:

version: '3.6'

services:
  bug:
    build:
      context: .
    environment:
      - PYTHONUNBUFFERED=1
    command: su -c "python3.6 forever.py"
Run Code Online (Sandbox Code Playgroud)

在哪里forever.py:

from time import sleep

if __name__ == '__main__':
    i = 0
    while True:
        sleep(1.0)
        i += 1
        print(f'hello {i:3}')
Run Code Online (Sandbox Code Playgroud)

现在我forever.py用docker compose 运行: …

python python-3.x docker docker-compose

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

用Short和int重载

为什么这段代码会打印int?

public static void main(String[] args) {
    short s = 5;
    A(s);
}
public static void A(int a){
    System.out.println("int");
}

public static void A(Short a){
    System.out.println("short");
}
Run Code Online (Sandbox Code Playgroud)

java

11
推荐指数
2
解决办法
936
查看次数

使用gson将json字段反序列化为纯字符串

我试图将json对象反序列化为java bean.我面临的主要问题是,我想object将json字符串的字段视为普通字符串,即使它包含一个可能正确的json对象.json结构是这样的:

{
    "type":"user",
    "object":{
        "id":"1", 
        ...}
}
Run Code Online (Sandbox Code Playgroud)

我如何告诉gson忽略该object值,以便它不被反序列化为一个对象?我希望它只被映射到String我的bean中的普通字段,以便我可以为它配置一个正确的反序列化,一旦我从type字段中获得了类型.

java gson deserialization

9
推荐指数
2
解决办法
4447
查看次数

如何在FreeBSD中获得以毫秒为单位的时间?

在Linux中,我可以使用以下命令找到当前时间(以毫秒为单位):

date +%s%N
Run Code Online (Sandbox Code Playgroud)

但是在FreeBSD上,我只得到了

[13:38 ]#date +%s%N
1299148740N
Run Code Online (Sandbox Code Playgroud)

如何在FreeBSD中获得以毫秒(或纳秒)为单位的时间?

shell freebsd

7
推荐指数
2
解决办法
5498
查看次数

在matlab中设置修改时间

我可以通过以下方式在matlab中获得修改时间:

>> f = dir('my_filename.dat');
>> f.date
Run Code Online (Sandbox Code Playgroud)

但是我怎么能改变呢?

matlab file octave

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