小编ute*_*ngr的帖子

Python中的多线程:卡在最后一个线程

我遇到了一个奇怪的情况,经过大量的试打后无法解决。我正在使用多线程(10)来读取url(100),并且在大多数情况下都能正常工作,但在某些情况下,它会卡在最后一个线程中。我等待它查看是否返回,并且花费了很多时间(1050秒),而其余9个线程在25秒内返回了。它表明我的代码有问题,但无法解决。有任何想法吗?

注意1:守护程序线程和非守护程序线程均会发生这种情况。

注2:URL和线程更改的数量。我尝试了10-100个不同的URL和5-50个不同的线程。

注意3:URL在大多数情况下完全不同。

import urllib2
import Queue
import threading
from goose import Goose

input_queue = Queue.Queue()
result_queue = Queue.Queue()
Run Code Online (Sandbox Code Playgroud)

线程工作者:

def worker(input_queue, result_queue):
    queue_full = true
    while queue_full:
        try:
            url = input_queue.get(False)
            read a url using urllib2 and goose
            process it
            result_queue.put(updated value)
        except Queue.Empty:
           queue_full = False
Run Code Online (Sandbox Code Playgroud)

主要过程:

for url in urls:
    input_queue.put(url)
thread_count = 5 
for t in range(thread_count):
        t = threading.Thread(target=worker, args= (input_queue, result_queue))
        t.start()

for url in urls:
    url = result_queue.get() # updates url   
Run Code Online (Sandbox Code Playgroud)

该过程在最后一次result_queue.get()调用时被阻塞。 …

python python-multithreading python-2.7 python-multiprocessing

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

阅读大型mongodb数据

我有一个java应用程序需要从MongoDB 3.2读取大量数据并将其传输到Hadoop.

该批次应用程序每4小时运行6次,每天6次.

数据规格:

  • 文件:每次80000(每4小时一次)
  • 尺寸:3gb

目前我正在使用MongoTemplateMorphia来访问MongoDB.但是,在使用以下内容处理此数据时,我收到OOM异常:

List<MYClass> datalist = datasource.getCollection("mycollection").find().asList();
Run Code Online (Sandbox Code Playgroud)

读取此数据并填充到Hadoop的最佳方法是什么?

  • MongoTemplate::Stream() 并逐一写入Hadoop?
  • batchSize(someLimit) 并将整批编写到Hadoop?
  • Cursor.batch() 并逐个写入hdfs?

java hadoop mongodb morphia

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

wmd(移词器距离)与基于wmd的相似度之间有什么区别?

我正在使用WMD计算句子之间的相似度。例如:

distance = model.wmdistance(sentence_obama, sentence_president)
Run Code Online (Sandbox Code Playgroud)

参考:https : //markroxor.github.io/gensim/static/notebooks/WMD_tutorial.html

但是,也存在基于WMD的相似性方法 (WmdSimilarity).

参考:https : //markroxor.github.io/gensim/static/notebooks/WMD_tutorial.html

两者之间有什么区别,除了明显的一个是距离,另一个是相似性?

更新:两者完全相同,只是表示形式不同。

n_queries = len(query)
result = []
for qidx in range(n_queries):
    # Compute similarity for each query.
    qresult = [self.w2v_model.wmdistance(document, query[qidx]) for document in self.corpus]
    qresult = numpy.array(qresult)
    qresult = 1./(1.+qresult)  # Similarity is the negative of the distance.

    # Append single query result to list of all results.
    result.append(qresult)
Run Code Online (Sandbox Code Playgroud)

https://github.com/RaRe-Technologies/gensim/blob/develop/gensim/similarities/docsim.py

nlp nltk gensim word2vec word-embedding

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

是否可以在没有 Twitter API 的情况下读取推文 URL 的推文文本?

我正在使用Goose从 URL 读取文章的标题/正文。但是,这不适用于 twitter URL,我猜是由于不同的 HTML 标签结构。有没有办法从这样的链接读取推文文本?

一个这样的推文示例(缩短的链接)如下:

https://twitter.com/UniteAlbertans/status/899468829151043584/photo/1
Run Code Online (Sandbox Code Playgroud)

注意:我知道如何通过 twitter API 阅读推文。不过,我对此不感兴趣。我只想通过解析 HTML 源代码来获取文本,而无需进行所有 twitter 身份验证。

url text-extraction web-scraping python-2.7 tweets

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

Python 中“导入为”的用例

我想知道我们是否可以使用“ import as”来创建相对紧凑或可读的代码。我知道它基于PEP 的常见用例,例如避免名称冲突。

情况如下(出于演示目的,保持非常简单)。假设我有一个模块名称 process_words.py。

process_words.py:

def word_to_lower(word):
    return word.lower
Run Code Online (Sandbox Code Playgroud)

process_article.py(让主脚本):

import process_words

word = "HELLO"
word_lower = process_words.word_to_lower(word)
print(word_lower)
Run Code Online (Sandbox Code Playgroud)

现在做这样的事情是坏还是好?:

import process_words as pw

word = "HELLO"
word_lower = pw.word_to_lower(word)
print(word_lower)
Run Code Online (Sandbox Code Playgroud)

这是一个非常简单的例子。我有几个模块,每个模块都有几个功能。导入每个函数from module import something并不是一种选择。对我来说,感觉如果我将 import as 与某些快捷方式名称一起使用,它将提高代码的可读性。有什么想法吗?

注意:我在这里指的是自定义模块。

python python-module pep8 python-import python-3.x

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

Matlab中向量的谱熵和谱能量

我将使用光谱能量和光谱熵作为基于窗口的时间序列数据的特征。但是,我对在线使用的公式有些困惑,尤其是关于特殊熵。

我使用了 Matlab 中的熵,但这不适用于时间序列数据。它只是给我所有的零。http://www.mathworks.nl/help/images/ref/entropy.html 此版本的测试窗口熵结果 = 0

然后我用了这个版本。 http://www.mathworks.com/matlabcentral/fileexchange/28692-entropy 测试窗口此版本的熵结果 = 4.3219

在将 imhist 应用于数据窗口(p = imhist(aw1(:));)后,我还尝试了 -sum(p.*log2(p))。这是从在线帮助中得到的。
此版本的测试窗口熵结果 = 0.0369

他们都报告了不同的值。

对于光谱能量,我使用的是 fft 系数的平方和。sum(abs(fft(data-window)).^2)

任何机构都可以给我任何正确版本的建议吗?

matlab fft entropy spectrum frequency-domain

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

Android中的dumpsys cpuinfo:解释此命令的结果

我正在查看以下命令"adb shell dumpsys cpuinfo",我想知道这些报告的值是否是前一次的平均值?

    D:\Android_Dev\Android_sdk\platform-tools>adb shell dumpsys cpuinfo
Load: 4.03 / 3.43 / 2.44
CPU usage from 23770ms to 16630ms ago:
  58% 1844/logd: 58% user + 0% kernel / faults: 3 minor
  50% 3895/com.google.android.wearable.app:ui: 41% user + 9.3% kernel / faults: 1798 minor
  26% 1864/adbd: 2.8% user + 23% kernel / faults: 1243 minor
  22% 4880/logcat: 7.8% user + 15% kernel
  9.7% 7834/kworker/0:2: 0% user + 9.7% kernel
  4.9% 2198/system_server: 2.6% user + 2.2% kernel / faults: 76 minor
Run Code Online (Sandbox Code Playgroud)

我的问题如下: …

performance android adb ddms dumpsys

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

如何将JSON树的每个分支转换为项目列表?

我想将JSON树结构的每个分支转换为该分支中的项列表.我想用循环来做,但我无法使用索引访问对象.

Example JSON:
{
    "Root": { "child1": "abc",
              "child2": "def",
              "child3": { "grandchild1": "nick",
                           "grandchild2": "Sam"
                        }
             }
 }
Run Code Online (Sandbox Code Playgroud)

我想遍历它们并将它们存储如下:

list1 = ['Root', "child1", "abc"]
list2 = ['Root', "child2", "def"]
list3 = ['Root', "child3", "grandchild1", "nick",]
list4 = ['Root', "child3", "grandchild2", "sam",]
Run Code Online (Sandbox Code Playgroud)

我读了JSON如下:

import json

with open('sample.json') as f:
    tree = json.load(f)
Run Code Online (Sandbox Code Playgroud)

问题: 我想循环遍历这些项目并将其附加到各种列表但我只能通过他们的密钥访问它们,就像tree['Root']给予Child1,2,3,然后tree['Root']['child3']应该给我另外两个成员.但是,在我的用例中,此方法不可伸缩,我在JSON文件中有1400个分支(非常深嵌套),我想为它们创建1400个列表.

任何想法如何有效地做到这一点?

python json python-3.x

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

如何将多个图像(子图)写入一张图像

我有两张图片,我想在一张图片中保存为子图。

我当前的代码可以很好地将它们显示为子图。

import cv2 as cv
from matplotlib import pyplot as plt
image1 = cv.imread('someimage')
image2 = cv.imread('anotherimage')
plt.subplot(1, 2, 1), plt.imshow(image1, 'gray')
plt.subplot(1, 2, 1), plt.imshow(image2, 'gray')
plt.show()
Run Code Online (Sandbox Code Playgroud)

OpenCVimwrite不能以其简单的形式工作,因为它需要一张图像作为输入。我想将这些子图保存在一张图像中以供以后进行视觉分析。我怎样才能做到这一点?

它可以并排或彼此重叠。只是一个例子:)

两张图片合二为一

该示例仅用于演示目的。我应该能够像创建子图(x,y)一样将多个图像保存为一个图像。例如,

在此处输入图片说明

python opencv matplotlib python-3.x

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

跨多种语言的语义相似度

我正在使用词嵌入来查找两个句子之间的相似性。使用 word2vec,如果一个句子是英语,另一个句子是荷兰语,我还可以获得相似性度量(尽管不是很好)。

所以我开始想知道是否有可能计算两种不同语言的两个句子之间的相似度(没有明确的翻译),特别是如果这些语言有一些相似之处(英语/荷兰语)?

nlp nltk gensim word2vec

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

在 Docker-Compose 中控制启动顺序

除了以下方法之外,是否可以控制 Docker-compose 中启动容器的顺序?

https://docs.docker.com/compose/startup-order/

version: "2"
services:
  web:
    build: .
    ports:
      - "80:8000"
    depends_on:
      - "db"
    command: ["./wait-for-it.sh", "db:5432", "--", "python", "app.py"]
  db:
    image: postgres
Run Code Online (Sandbox Code Playgroud)

我有一个依赖于 redis 数据库容器的容器。然而,redis 加载到内存中需要更长的时间,这会导致第一个容器退出。目前,我使用始终重新启动方法来处理该问题作为解决方法。

我想知道是否有更好的替代方案,因为我会尝试避免等待脚本?

docker dockerfile docker-compose

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

如何将常量变量传递给函数

在以下场景中,哪一个是更好的设计,为什么?

A:

stop_words = ['com1', 'com2'] 
    
def clean_text(text_tokens, stop_words):
    return [token for token in text_tokens if token not in stop_words]

clean_text(['hello', 'world', 'com1', 'com2'], stop_words)
Run Code Online (Sandbox Code Playgroud)

乙:

def clean_text(text_tokens):
    stop_words = ['com1', 'com2']
    return [token for token in text_tokens if token not in stop_words]

clean_text(['hello', 'world', 'com1', 'com2'])
Run Code Online (Sandbox Code Playgroud)

C:

STOP_WORDS = ['com1', 'com2'] 
    
def clean_text(text_tokens):
    return [token for token in text_tokens if token not in STOP_WORDS]

clean_text(['hello', 'world', 'com1', 'com2'])
Run Code Online (Sandbox Code Playgroud)

添加了基于@MisterMiyagi 回答的 C 版本。

注1:在这种情况下,stop_words 是固定的,不会改变。

注2:stop_words 可以是一个很小的列表,也可以是一个很大的列表。

python pep8 python-3.x

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